我在Google Appengine上使用Jersey编写了一个处理简单文件上传的应用程序。当它使用Jersey 1.2版本时,一切都很好。在后续版本(当前为1.7)中引入了@FormDataParam来处理multipart/form输入。我正在使用jersey-multipart和mimepull依赖项。现在的做法似乎是在appengine中创建临时文件,我们都知道这是不合法的...
我是否遗漏了什么或者做错了什么,因为Jersey现在应该与AppEngine兼容了吗?
@POST
@Path("upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void upload(@FormDataParam("file") InputStream in) { .... }
当使用以下异常调用时,上述方法将失败...
/upload
java.lang.SecurityException: Unable to create temporary file
at java.io.File.checkAndCreate(File.java:1778)
at java.io.File.createTempFile(File.java:1870)
at java.io.File.createTempFile(File.java:1907)
at org.jvnet.mimepull.MemoryData.createNext(MemoryData.java:87)
at org.jvnet.mimepull.Chunk.createNext(Chunk.java:59)
at org.jvnet.mimepull.DataHead.addBody(DataHead.java:82)
at org.jvnet.mimepull.MIMEPart.addBody(MIMEPart.java:192)
at org.jvnet.mimepull.MIMEMessage.makeProgress(MIMEMessage.java:235)
at org.jvnet.mimepull.MIMEMessage.parseAll(MIMEMessage.java:176)
at org.jvnet.mimepull.MIMEMessage.getAttachments(MIMEMessage.java:101)
at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.readMultiPart(MultiPartReaderClientSide.java:177)
at com.sun.jersey.multipart.impl.MultiPartReaderServerSide.readMultiPart(MultiPartReaderServerSide.java:80)
at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.readFrom(MultiPartReaderClientSide.java:139)
at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.readFrom(MultiPartReaderClientSide.java:77)
at com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:474)
at com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:538)
有人知道吗?是否有一种方法可以在防止mimepull创建临时文件的同时完成这个事情?
jersey.config.multipart.bufferThreshold
作为属性名称。 - David Welchresources
应该放在哪里?是放在\war
目录下还是\WEB-INF
目录下或其他地方?谢谢。 - Floris