【发布时间】:2013-11-17 17:33:32
【问题描述】:
我正在尝试制作一个将图像上传并插入数据库的 Servlet。 此图像是数据库中的 blob 类型。 代码给了我这个错误: org.netbeans.modules.web.monitor.server.MonitorRequestWrapper 无法转换为 org.apache.tomcat.util.http.fileupload.RequestContext [Ljava.lang.StackTraceElement;@30ec706b
这是我的代码的一部分: ## web.xml ##
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>Servlet.UploadServlet</servlet-class>
<init-param>
<param-name>uploadDir</param-name>
<param-value>/tmp</param-value>
</init-param>
</servlet>
数据Utente
protected void processRequest(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
HttpSession session=request.getSession(false);
PrintWriter out = response.getWriter();
try {
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet DataUtente</title>");
out.println("</head>");
out.println("<body>");
Utente utente =(Utente)session.getAttribute("utente");
out.println("<h1> Welcome " + utente.getUsername() + "</h1>");
out.println(" <form name=\"myWebForm\" action=\"UploadServlet\"
method=\"POST\" ENCTYPE=\"multipart/form-data\">\n" +
" <input type=\"file\" name=\"uploadField\" />\n" +
" <INPUT TYPE='submit' VALUE='upload'>"+
"</form>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
上传服务
public class UploadServlet extends HttpServlet {
DBManager dbman;
private int maxFileSize = 50 * 1024;
private int maxMemorySize = 4 * 1024;
private File file ;
private String dirName;
public void init(ServletConfig config) throws ServletException{
super.init(config);
//read the uploadDir from the servlet parameters
dirName=config.getInitParameter("uploadDir");
if(dirName== null){
throw new ServletException("Please supply uploadDir parameters");
}
}
protected void processRequest(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
HttpSession session=request.getSession(false);
PrintWriter out = response.getWriter();
try {
// Apache Commons-Fileupload library classes
DiskFileItemFactory factory = new DiskFileItemFactory();
//maximum size that will be stored in memory
factory.setSizeThreshold(maxMemorySize);
//create a file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax( maxFileSize );
if (! ServletFileUpload.isMultipartContent(request)) {
System.out.println("sorry. No file uploaded");
return;
}
// parse request
List items = upload.parseRequest((RequestContext) request);
// get uploaded file
FileItem file = (FileItem) items.get(0);
// Connect to the DB
dbman = new DBManager();
Utente utente=(Utente)session.getAttribute("utente");
//String query = "insert into photos values(?)";
PreparedStatement ps = dbman.connectToDB().prepareStatement("insert into
Utente(avatar) values(?) where Id='" + utente.getId() + "'");
ps.setBinaryStream(1, file.getInputStream(), (int) file.getSize());
ps.executeUpdate();
// dbman.connectToDB().commit();
dbman.connectToDB().close();
out.println("Proto Added Successfully. <p> <a href='listphotos'>List Photos
</a>");
}
catch(Exception ex) {
out.println( "Error ==> " + ex.getMessage());
out.print(ex.getStackTrace());
}
}
这里是 DDmanager:
public void closeConnection(){
try {
dbConnection.close();
} catch (SQLException ex) {
ex.printStackTrace();
Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex);
}
}
public Connection connectToDB() throws SQLException, ClassNotFoundException{
String dbString = null;
Class.forName(driver);
dbString = "jdbc:derby://localhost:1527/DB";
dbConnection = (Connection) DriverManager.getConnection(dbString, userName,
password);
return dbConnection;
}
public boolean connectToDb() {
//conneto a db
try {
String dbString = null;
Class.forName(driver);
dbString = "jdbc:derby://localhost:1527/DB";
dbConnection = (Connection) DriverManager.getConnection(dbString, userName,
password);
} catch (Exception e) {
e.printStackTrace();
// System.out.print("erore");
return false;
}
return true;
}
public ResultSet executeQuery(String command) {
try {
stmt = dbConnection.createStatement();
ResultSet ress = stmt.executeQuery(command);
return ress;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public void executeUpdateQuery(String command) {
try {
stmt = dbConnection.createStatement();
int ress = stmt.executeUpdate(command);
stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
【问题讨论】:
标签: java jakarta-ee file-upload servlet-3.0