Hi!
I'm trying to do a file upload in servlet 3 in glassfish v3.
However, it seams the fileupload is really broken.
I've attached a screenshot of me debugging the problem.
As one can see in the screenshot, the part object holds a reference to
/home/domdorn/skriptum/upload/upload_42ae4017_127f2c57e98__7ffb_00000004.tmp
while the really created file gets named IMG_5899_6046327792819005534.JPG
Thus, trying to execute the .write(newPath) on the Part object results
in the following exception
[#|2010-04-12T18:35:17.304+0200|WARNING|glassfishv3.0|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=24;_ThreadName=http-thread-pool-8080-(1);|StandardWrapperValve[uploadDocumentServlet]:
PWC1406: Servlet.service() for servlet uploadDocumentServlet threw
exception
java.io.FileNotFoundException:
/home/domdorn/skriptum/upload/upload_42ae4017_127f2c57e98__7ffb_00000004.tmp
(No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:137)
at org.apache.catalina.fileupload.PartItem.write(PartItem.java:436)
at org.apache.catalina.fileupload.PartItem.write(PartItem.java:470)
at com.dominikdorn.sk.servlets.UploadDocumentServlet.doPost(UploadDocumentServlet.java:71)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at com.dominikdorn.dc.filters.UserAgentCompatibleFilter.doFilter(UserAgentCompatibleFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at net.balusc.http.multipart.MultipartFilter.doFilter(MultipartFilter.java:78)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at com.dominikdorn.sk.service.UserRoleFilter.doFilter(UserRoleFilter.java:46)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at com.dominikdorn.dc.filters.UserAgentCompatibleFilter.doFilter(UserAgentCompatibleFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:636)
|#]
This is the servlet I'm using
package com.dominikdorn.sk.servlets;
import com.dominikdorn.sk.dao.MemberDao;
import com.dominikdorn.sk.domain.FileEntity;
import com.dominikdorn.sk.domain.FileType;
import com.dominikdorn.sk.service.FileService;
import com.dominikdorn.sk.service.FileTypeService;
import javax.activation.MimeTypeParseException;
import javax.activation.MimetypesFileTypeMap;
import javax.annotation.ManagedBean;
import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
/**
* Dominik Dorn
* 0626165
* dominik.dorn_at_tuwien.ac.at
*/
@WebServlet(name = "uploadDocumentServlet", urlPatterns = {"/uploadDocument"})
@MultipartConfig(
location = "/home/domdorn/skriptum/upload/"
, maxFileSize = 20971520l // 20MB
// , fileSizeThreshold = 1024 // 10kb
)
@ManagedBean
public class UploadDocumentServlet extends HttpServlet {
@Inject
MemberDao memberDao;
@Inject
FileService fileService;
@Inject
FileTypeService fileTypeService;
@Override
protected void doPost(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws ServletException,
IOException {
Part part = httpServletRequest.getPart("file");
System.out.println("part.getName() = " + part.getName());
System.out.println("part.getContentType() = " + part.getContentType());
System.out.println("part.toString() = " + part.toString());
System.out.println("part.getHeaderNames().toString() = " +
part.getHeaderNames().toString());
System.out.println("part.getSize() = " + part.getSize());
System.out.println("memberDao = " + memberDao);
String mimeType = part.getContentType();
String fileName = part.getHeader("name");
System.out.println("mimeType = " + mimeType);
System.out.println("fileName = " + fileName);
UUID hash = UUID.randomUUID();
String newFileNamePath
="/home/domdorn/skriptum/upload/"+hash.toString();
part.write(newFileNamePath);
part.delete();
// String mimeType =
MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType(file);
FileType fileType = fileTypeService.getByMimeType(mimeType);
FileEntity fileEntity;
String ip = httpServletRequest.getRemoteAddr();
try {
fileEntity = fileService.persistFile(newFileNamePath, ip, null);
fileEntity.setIpAddress(ip);
} catch (MimeTypeParseException e) {
e.printStackTrace(); //To change body of catch statement
use File | Settings | File Templates.
}
System.out.println("done everything! horray");
}
}
This also happens on the lastest v3u1 nightly.
Am I am doing something wrong here?
Thanks,
Dominik
--
Dominik Dorn
http://dominikdorn.com
Tausche Deine Lernunterlagen auf http://www.studyguru.eu !