最终,我在没有Jersey耦合的情况下设法解决了这一问题。问题是
@Multipart注释不能与一起使用
Application,因此您需要在web.xml内定义它,而在
Application类内定义提供的服务。在服务内部,您可以正常使用注释。另请注意,我正在
Parts从请求中提取,但这很容易。
PS。实际上,这实现了bluimp JQuery文件上传的后端
web.xml
<servlet> <servlet-name>com.web.rest.JaxRsActivator</servlet-name> <multipart-config> <location>c:dotmp</location> <max-file-size>35000000</max-file-size> <max-request-size>218018841</max-request-size> <file-size-threshold>0</file-size-threshold> </multipart-config></servlet><servlet-mapping> <servlet-name>com.dothatapp.web.rest.JaxRsActivator</servlet-name> <url-pattern>/rest/*</url-pattern></servlet-mapping>
JaxRsActivator.java
import java.util.HashSet; import java.util.Set; import javax.ws.rs.core.Application; public class JaxRsActivator extends Application { @Override public Set<Class<?>> getClasses() { Set<Class<?>> s = new HashSet<Class<?>>(); s.add(FileUpload.class); return s; } }FileUpload.java
import java.io.IOException;import javax.json.Json;import javax.json.JsonArrayBuilder;import javax.json.JsonObject;import javax.json.JsonObjectBuilder;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.Part;import javax.ws.rs.POST;import javax.ws.rs.Path;import javax.ws.rs.Produces;import javax.ws.rs.core.Context;import javax.ws.rs.core.MediaType;import javax.ws.rs.core.Response;@Path("/")public class FileUpload { @POST @Produces(MediaType.APPLICATION_JSON) @Path("fileupload") public Response doUpload(@Context HttpServletRequest request) { JsonArrayBuilder array = Json.createArrayBuilder(); try { for (Part part : request.getParts()) { String name = null; long size = 0; try { if (part.getContentType() == null || !part.getContentType().toLowerCase() .startsWith("image/")) continue; name = part.getSubmittedFileName(); size = part.getSize(); array.add(addFile(name, size, "anId")); part.delete(); } catch (Exception e) { array.add(addError(name, size, "ERROR")); } } } catch (IOException | ServletException e) { e.printStackTrace(); } JsonObject ret = Json.createObjectBuilder().add("files", array).build(); return Response.status(201).entity(ret).build(); } private JsonObjectBuilder addFile(String name, long size, String url) { return Json.createObjectBuilder().add("name", name).add("size", size) .add("lid", url); } private JsonObjectBuilder addError(String name, long size, String error) { return Json.createObjectBuilder().add("name", name).add("size", size) .add("error", error); }}


