【发布时间】:2015-02-02 22:35:01
【问题描述】:
我正在尝试通过 jsp 页面中的标签<s:file> 将图像放入 MySQL 数据库中(我使用的是 Struts 2):
<s:form action="carica" id="carica" style="display:none">
<s:file id="carica" name="caricaimg"></s:file>
<s:submit value="Carica" ></s:submit>
</s:form>
在我的课堂上我做了这个:
public String carica() throws SQLException, FileNotFoundException{
Connessione(); // DB connection method
System.out.print(caricaimg);
File file = new File(caricaimg);
InputStream fin = new java.io.FileInputStream(file);
int fileLength = (int)file.length();
PreparedStatement pstmt = con.prepareStatement("INSERT INTO Utenti (NomeImg, Immagine) VALUES (?, ?)");
pstmt.setString(1, file.getName());
pstmt.setBinaryStream (2, fin, fileLength);
pstmt.executeUpdate();
return "success";
}
一切看起来都不错,但是当我选择带有 <s:file> 的图像时,它只返回所选文件的名称,所以当我尝试将图像放入 DB 时,它会返回此错误
HTTP 状态 500 - ImgName.jpg(无法找到所选文件)
这是我的 struts.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="Model" extends="struts-default">
<action name="dati" class="Model.Registrazione" method="execute">
<result name="success">/RegistrazioneRiuscita.jsp</result>
</action>
<action name="login">
<result>/Login.jsp</result>
</action>
<action name="acces" class="Model.Registrazione" method="accesso">
<result name="success">/LoginRiuscito.jsp</result>
<result name="fail">/LoginFallito.jsp</result>
</action>
<action name="modifica" class="Model.Registrazione" method="modifica">
<result name="success">/ModificaRiuscita.jsp</result>
<result name="fail">/ModificaFallita.jsp</result>
</action>
<action name="elimina" class="Model.Registrazione" method="elimina">
<result name="success">/EliminatoSuccesso.jsp</result>
</action>
<action name="carica" class="Model.Registrazione" method="carica">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
这是将所选文件处理为method="POST"的部分
<action name="carica" class="Model.Registrazione" method="carica">
<result name="success">/index.jsp</result>
</action>
【问题讨论】:
-
您只能从用户的机器上获取文件名而不是路径,因为这会给用户带来安全风险。您不需要他们机器上的路径,也不应该希望它...因为您要将文件放在服务器上您想要的任何位置,而不是他们拥有它的位置。
-
是的,但是如果没有路径,我如何将所选文件提供给 'File file = new File();" ?
-
你必须将它保存到服务器,然后你就有一个完整的路径,它在服务器上的路径。您没有在实际处理 POST 文件的位置发布代码,但它应该已经这样做了。如果不是,那就有问题了。
-
但是我使用的是Struts 2,我不需要写method="POST"。 (我编辑了主要问题,所以你可以看到我的 struts.xml 文件)
-
我说的是服务器端部分,您实际上检索文件并保存它。哪里是?例如,变量
caricaimg显然是全局变量,你在哪里设置?
标签: java mysql jsp file-upload struts2