hello
we are building a site, in which we want to enable for the user to upload pictures from an html form to a java filter.
the form is as follows:
<html>
<body>
<FORM action=”
enctype=”multipart/form-data”
method=”post”>
<P>
What files are you sending? <INPUT type=”file” name=”files”><BR>
<INPUT type=”submit” value=”Save”> <INPUT type=”reset”>
</FORM>
</body>
</html>
the filter code is:
package upload;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import misc.*;
public class UploadMultipartFilter implements Filter{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter out = response.getWriter();
response.setContentType(“text/html”);
out.println(“hello world”);
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest hRequest = (HttpServletRequest)request;
//Check whether we’re dealing with a multipart request
boolean isMultipart = (hRequest.getHeader(“content-type”) != null &&
hRequest.getHeader(“content-type”).indexOf(“multipart/form-data”) != -1);
Logger.printlnToDebugLog(“###############” + “is multi part = ” + isMultipart + “###############”);
if(isMultipart == false){
chain.doFilter(request,response);
}else{
//We’re dealing with a multipart request – we have to wrap the request.
UploadMultipartRequestWrapper wrapper = new UploadMultipartRequestWrapper(hRequest);
Logger.printlnToDebugLog(“###############” + “wrapper = ” + wrapper.getFile(“sample.war”) + “###############”);
chain.doFilter(wrapper,response);
}
}
public void destroy() {}
public void init(FilterConfig config) throws ServletException {}
}
package upload;
import java.io.File;
import java.io.PrintWriter;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import misc.Logger;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadMultipartRequestWrapper extends HttpServletRequestWrapper{
private Map<String,String> formParameters;
private Map<String,FileItem> fileParameters;
public UploadMultipartRequestWrapper(HttpServletRequest request) {
super(request);
try{
Logger.printlnToDebugLog(“in c’tor UploadMultipartRequestWrapper”);
ServletFileUpload upload = new ServletFileUpload();
upload.setFileItemFactory(new DiskFileItemFactory());
Logger.printlnToDebugLog(“in c’tor UploadMultipartRequestWrapper”);
List fileItems = upload.parseRequest(request);
formParameters = new HashMap<String,String>();
fileParameters = new HashMap<String,FileItem>();
Logger.printlnToDebugLog(“in c’tor UploadMultipartRequestWrapper”);
for(int i=0;i<fileItems.size();i++){
FileItem item = (FileItem)fileItems.get(i);
if(item.isFormField() == true){
formParameters.put(item.getFieldName(),item.getString());
Logger.printlnToDebugLog(formParameters.toString());
}else{
fileParameters.put(item.getFieldName(),item);
request.setAttribute(item.getFieldName(),item);
File cfile=new File(item.getName());
File tosave=new File(“//” ,cfile.getName());
item.write(tosave);
Logger.printlnToDebugLog(fileParameters.toString());
}
}
}/*catch(FileUploadException fe){
fe.printStackTrace();
Logger.printlnToDebugLog(“file upload exception”);
}*/catch(Exception ne){
ne.printStackTrace();
Logger.printlnToDebugLog(“exception: ” + ne);
throw new RuntimeException(ne);
}
}
public String getParameter(String name) {
if(formParameters.get(name) != null){
return formParameters.get(name);
}
if(fileParameters.get(name) != null){
return “file”;
}
return null;
}
public Enumeration getFileNames(){
return Collections.enumeration(fileParameters.keySet());
}
public FileItem getFile(String name){
return fileParameters.get(name);
}
public Map getParameterMap() {
return formParameters;
}
public Enumeration getParameterNames() {
return Collections.enumeration(formParameters.keySet());
}
public String[] getParameterValues(String arg0) {
String[] values = new String[formParameters.size()];
Iterator<String> iter = formParameters.values().iterator();
for(int i=0;i<values.length;i++){
values[i] = iter.next();
}
return values;
}
}
we are using a tomcat server ( at [url]http://s43.eatj.com/)
when attemping to upload we get the following error:
HTTP Status 500 –
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
java.lang.RuntimeException: java.io.FileNotFoundException: /E:test.gif (Permission denied)
upload.UploadMultipartRequestWrapper.<init>(UploadMultipartRequestWrapper.java:64)
upload.UploadMultipartFilter.doFilter(UploadMultipartFilter.java:38)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.
Apache Tomcat/5.5.9
I am uploading from windows xp, the error occures both in IE 6 and firefox 1.5.
I also checked several files, none of which have special permissions.
what can we do?
Thank you