我写了一个按照这样的方式上传文件的方法:
@POST
@Path("file")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_HTML)
public String uploadFile(
@FormDataParam("file") InputStream in,
@FormDataParam("file") FormDataContentDisposition fileDisposition,
@FormDataParam("fileName") String fileName){
String fullName = fileDisposition.getFileName();
try {
OutputStream os = new FileOutputStream(
new File("D://",
fileName + fullName.substring(fullName.indexOf('.'))));
int index = 0;
byte[] buffer = new byte[256];
while( (index = in.read(buffer)) != -1){
os.write(buffer , 0 , index);
}
in.close();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fullName;
}
如您所见,它非常简单。但是当我将它部署到Tomcat时,我收到了一个错误:
严重: The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: Missing dependency for method public java.lang.String rest.upload.Upload.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition,java.lang.String) at parameter at index 0
SEVERE: Missing dependency for method public java.lang.String rest.upload.Upload.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition,java.lang.String) at parameter at index 1
SEVERE: Missing dependency for method public java.lang.String rest.upload.Upload.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition,java.lang.String) at parameter at index 2
SEVERE: Method, public java.lang.String rest.upload.Upload.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition,java.lang.String), annotated with POST of resource, class rest.upload.Upload, is not recognized as valid resource method.
八月 29, 2014 6:01:30 下午 org.apache.catalina.core.ApplicationContext log
严重: StandardWrapper.Throwable
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
八月 29, 2014 6:01:30 下午 org.apache.catalina.core.StandardContext loadOnStartup
严重: Servlet /upload threw load() exception
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
好的,我能做些什么来解决这个问题?
答案 0 :(得分:1)
正如我后面所知,注释@FormDataParam使用了名为jersey_multipart.jar的jar,其路径是 com.sun.jersey.multipart.FormDataParam。
更重要的是,它与@ POST / @ PathParam等其他注释不同,其路径为javax.ws.rs。*;
问题在于,当我将jersey_multipart.jar添加到项目中时,它的版本是1.18,而jersey-core.jar是版本1.14。所以它们之间存在冲突。
所以我让这些罐子版本一样,问题本身就解决了。
答案 1 :(得分:0)
确保在您的运行时类路径中添加了 1)jersey-multipart-1.17.1.jar 2)mimepull-1.6.jar
除此之外,你应该拥有与jersey-core或jersey-bundle相同的版本。