只有File上传到数据库,所有其他字段都是NULL

时间:2015-01-12 13:05:13

标签: javascript mysql file jsp upload

正如标题所说,我在mysql数据库中插入信息,但只有我上传的文件被插入到数据库中。其他一切都是NULL。我怀疑它与在服务器上创建临时目录以保存文件有关,但是我再也找不到解决方案了。

以下是我插入

的表格
CREATE TABLE DOC(IDD INT NOT NULL AUTO_INCREMENT, DOCN VARCHAR(50), AUTHOR VARCHAR(50), CAT VARCHAR(50),CONTENT MEDIUMBLOB NOT NULL, CRITN INT DEFAULT 0,  PRIMARY KEY(IDD)); 

以下是我发送

的html表单
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
 <head>
    <title>TODO supply a title</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width">
</head>
<body>
    <form enctype="multipart/form-data" action="uploadfile.jsp" method="post" onsubmit="return verify()">      
<table border='1'>
<tr>
<span style="color:black">Τίτλος</span> <input type="text" name="title"><p></p>
<span style="color:black">Συγγραφέας</span> <input type="text" name="author"><p></p>
<span style="color:black">Κατηγορία</span> <input type="text" name="cat"><p></p>
   <td>   
      Επιλέξτε το άρθρο που θέλετε.      
   </td>
 </tr>
<tr>
<td>
      <input type="file" name="filename" id="filename"accept="application/pdf"/>                                                            
   </td>
</tr>
<tr>
   <td>
  <input type="submit" value="Upload" />
 </td>
</tr>
</table>
</form>
</body>
</html>

这里是jsp的代码

 <%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.io.InputStream"%>
<%@page import="conPackage.MyConnection"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="java.util.Enumeration"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@page import="java.io.File"%>
<%@ page import="java.util.Properties.*" %>
<%@ page import="java.security.MessageDigest;"%>
<%@ page import="java.util.*"%>
<%@page import="java.sql.*"%>
<!DOCTYPE html>
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
</head>
<body>
    <%


   String rtempfile = File.createTempFile("temp","1").getParent(); 

MultipartRequest multi = new MultipartRequest(request,rtempfile, 15*1024*1024);

Enumeration files = multi.getFileNames();

String docn =request.getParameter("title");

String author = request.getParameter("author");

String cat= request.getParameter("cat");



String st="insert into doc(docn, author, cat, content) values (?,?,?,?)";

PreparedStatement psmt=MyConnection.getConnection().prepareStatement(st);


String name="";
String fileExtesion="";
File ff =null;
FileInputStream fin =null;


while (files.hasMoreElements())
{
   name=(String)files.nextElement();                                        
   ff = multi.getFile(name);
   fileExtesion = ff.getName().substring(ff.getName().lastIndexOf("."));

   // check user has select the correct file or not
   boolean fileAllowed = fileExtesion.equalsIgnoreCase(".pdf");

   if((ff!=null)&&fileAllowed)
   {

     try
     {
       fin=new FileInputStream(ff);
       psmt.setString(1, docn);
       psmt.setString(2, author);
       psmt.setString(3, cat);
       psmt.setBinaryStream(4,(InputStream)fin, (int)(ff.length()));

       boolean sss = psmt.execute();

       out.print("uploaded successfully..");
       out.print("<br/> Go to <a href='downloadfile.jsp'>Download</a> page");
     }

     catch(Exception e)
     {
       out.print("Failed due to " + e);
     }

     finally
     {


           fin.close();
           ff.delete();
     }
   }
   else
   {
         out.print("Please select the correct file...");
   }// end of if and else
}// end of while

MyConnection.CloseConnection();     // close the connection
%>
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

使用enctype multipart/form-data时,您必须使用request.getPart作为常规参数,因为request.getParameter始终会返回null multipart/form-data。处理文件上传的另一个选项是Apache Commons File Upload库,但在这种情况下,您必须使用与获取文件相同的方法获取常规参数。