这两天在使用jersey 构建的jersey JAX-RS REST服务器,在通过POST方法上传文件的时候,如果根据example来操作的话会引发如下异常:
1 SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.lotame.ws.api.resources.FileResource.uploadFile(java.io.InputStream,com. sun.jersey.core.header.FormDataContentDisposition) at parameter at index 0 2 SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.lotame.ws.api.resources.FileResource.uploadFile(java.io.InputStream,com. sun.jersey.core.header.FormDataContentDisposition) at parameter at index 1 3 SEVERE: Method, public javax.ws.rs.core.Response com.lotame.ws.api.resources.FileResource.uploadFile(java.io.InputStream,com.sun.jersey.core.header .FormDataContentDisposition), annotated with POST of resource, class com.lotame.ws.api.resources.FileResource, is not recognized as valid resource method.
或者
1 HTTP 415-Unsupported Media Type Error
在网上查了好多,貌似都不能解决我遇到的问题,然后就不用他本身提供的例子,下面是我实现上传功能的例子:
1:创建一个JAVA Web工程:
2:XML文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 3 <display-name>Restful Web Application</display-name> 4 5 <servlet> 6 <servlet-name>jersey-helloworld-serlvet</servlet-name> 7 <servlet-class> 8 com.sun.jersey.spi.container.servlet.ServletContainer 9 </servlet-class> 10 <init-param> 11 <param-name>com.sun.jersey.config.property.packages</param-name> 12 <param-value>upload</param-value> 13 </init-param> 14 <load-on-startup>1</load-on-startup> 15 </servlet> 16 17 <servlet-mapping> 18 <servlet-name>jersey-helloworld-serlvet</servlet-name> 19 <url-pattern>/rest/*</url-pattern> 20 </servlet-mapping> 21 </web-app>
3:ImageResource类中的内容
1 package upload; 2 3 import java.io.File; 4 import java.util.Iterator; 5 import java.util.List; 6 7 import javax.servlet.http.HttpServletRequest; 8 import javax.ws.rs.Consumes; 9 import javax.ws.rs.POST; 10 import javax.ws.rs.Path; 11 import javax.ws.rs.Produces; 12 import javax.ws.rs.core.Context; 13 import javax.ws.rs.core.MediaType; 14 15 import org.apache.tomcat.util.http.fileupload.FileItem; 16 import org.apache.tomcat.util.http.fileupload.FileItemFactory; 17 import org.apache.tomcat.util.http.fileupload.FileUploadException; 18 import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory; 19 import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload; 20 21 @Path("/images") 22 @Consumes(MediaType.MULTIPART_FORM_DATA) 23 public class ImageResource { 24 private static final String SERVER_UPLOAD_LOCATION_FOLDER = "C://"; 25 26 @POST 27 @Produces(MediaType.APPLICATION_JSON) 28 public String uploadStatePolicy(@Context HttpServletRequest request) { 29 try { 30 String fileName = saveFile(request); 31 if (!fileName.equals("")) { 32 } else { 33 34 } 35 } catch (Exception ex) { 36 } 37 return ""; 38 } 39 40 private String saveFile(HttpServletRequest request) { 41 String fileName = ""; 42 try { 43 if (ServletFileUpload.isMultipartContent(request)) { 44 FileItemFactory factory = new DiskFileItemFactory(); 45 ServletFileUpload upload = new ServletFileUpload(factory); 46 List<FileItem> items = null; 47 try { 48 items = upload.parseRequest(request); 49 } catch (FileUploadException e) { 50 e.printStackTrace(); 51 } 52 if (items != null) { 53 Iterator<FileItem> iter = items.iterator(); 54 while (iter.hasNext()) { 55 FileItem item = iter.next(); 56 if (!item.isFormField() && item.getSize() > 0) { 57 fileName = processFileName(item.getName()); 58 try { 59 item.write(new File( 60 SERVER_UPLOAD_LOCATION_FOLDER 61 + fileName)); 62 } catch (Exception e) { 63 e.printStackTrace(); 64 } 65 } 66 } 67 } 68 } 69 } catch (Exception e) { 70 } 71 return fileName; 72 } 73 74 private String processFileName(String fileNameInput) { 75 String fileNameOutput = null; 76 fileNameOutput = fileNameInput.substring( 77 fileNameInput.lastIndexOf("\") + 1, fileNameInput.length()); 78 return fileNameOutput; 79 } 80 }
4:form.html文件
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd"> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 5 <title>Form Page</title> 6 </head> 7 <body> 8 <h1>Upload a File</h1> 9 10 <form action="http://localhost:8080/JerseyUpLoad/rest/images" method="post" enctype="multipart/form-data"> 11 12 <p> 13 Select a file : <input type="file" name="file" size="50" /> 14 </p> 15 16 <input type="submit" value="Upload It" /> 17 </form> 18 19 </body> 20 </html>
5运行即可。