Reputation: 31
I am trying to make a Servlet that upload and insert an image to the Data base . this image is of blob type in the database . The code gives me this error : org.netbeans.modules.web.monitor.server.MonitorRequestWrapper cannot be cast to org.apache.tomcat.util.http.fileupload.RequestContext [Ljava.lang.StackTraceElement;@30ec706b
here is a part of my code : ## 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>
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());
}
}
and here is the 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();
}
Upvotes: 1
Views: 922
Reputation: 1
I used alternative classes:
import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; @WebServlet("/FileUploadServlet") public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); // set file upload progress listener FileUploadListener listener = new FileUploadListener(); HttpSession session = request.getSession(); session.setAttribute("LISTENER", listener); // upload servlet allows to set upload listener upload.setProgressListener(listener); List uploadedItems = null; FileItem fileItem = null; String filePath = "c:\\My\\tmp"; // Path to store file on local system try { // get all uploaded files uploadedItems = upload.parseRequest(request); // Iterator i = uploadedItems.iterator(); if(uploadedItems.size()>0) { fileItem = (FileItem) uploadedItems.get(0);//i.next(); if (fileItem.isFormField() == false) { if (fileItem.getSize() > 0) { File uploadedFile = null; String myFullFileName = fileItem.getName(), myFileName = "", slashType = (myFullFileName.lastIndexOf("\\") > 0) ? "\\" : "/"; // Windows or UNIX int startIndex = myFullFileName.lastIndexOf(slashType); // Ignore the path and get the filename myFileName = "imgout.jpg"; //myFullFileName.substring(startIndex + 1, myFullFileName.length()); // Create new File object uploadedFile = new File(filePath, myFileName); // Write the uploaded file to the system fileItem.write(uploadedFile); } } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
Upvotes: 0
Reputation: 103
Look your version of apache tomcat, I upgraded to 7.0.41 and TBM gave the error, returned to 7.0.34 and it worked again, not yet found the way to do this in 7.0.41
List items = upload.parseRequest((RequestContext) request);
remove conversion (RequestContext) if return the version of apache
List items = upload.parseRequest(request);
Upvotes: 1