我对REST风格的文件上传代码:
@Path("/upload")
@POST
@Consumes("multipart/form-data")
public String post(
@FormDataParam("part") String s,
@FormDataParam("part") FormDataContentDisposition d) {
return s + ":" + d.getFileName();
}
当我尝试上传文件中使用卷发-X POST --form part=@file.txt网址
我得到一个HTTP 415 - 不支持的媒体类型错误。 怎么了 ?
尝试了很多的例子之后finaly找到实物工作示例http://iambigd.blogspot.com/2011/06/java-upload-file-using-jersey.html
@POST
@Path("/simpleupload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void simpleUpload(
//@Context UriInfo ui,
@Context HttpServletRequest request
){
String fileRepository = "D:\\";
if (ServletFileUpload.isMultipartContent(request)) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = null;
try {
items = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
if (items != null) {
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
if (!item.isFormField() && item.getSize() > 0) {
System.out.println("File is found.");
String fileName = processFileName(item.getName());
try {
String savePath = fileRepository + fileName;
System.out.println("savePath:" + savePath);
item.write(new File(savePath));
} catch (Exception e) {
e.printStackTrace();
}
}else{
System.out.println("getFieldName:" + item.getFieldName());
System.out.println(item.getString());
}
}
}
}
}
(需要在servlet-api.jar文件,(阿帕奇)公地oi.jar和(阿帕奇)的commons-fileupload.jar)
这可以一对夫妇的原因发生所致。 我设法缩小其中的一些。
您的Content-Type头不匹配由@Consumes头提供的一个。 与代理验证这一点。
您在管理绊倒的错误是固定在泽西岛1.4相关FormDataParam注解。
你包括球衣束和球衣服务器等所有在相同的二进制和他们相互竞争。
您正在使用@FormParam代替@FormDataParam。
你@FormDataParam通过内省API,因为与新泽西州的多和其他球衣罐子冲突无法识别。 如果一个罐子的1.x版本确保其他罐子上的版本相同。 在调试球衣API代码我注意到,这些方法的注释打开了空白(球衣上的代码)如果jar版本并不统一。 在REST服务的所有方法的参数是由POST请求而不管其FormDataParam他们都应该包含的主体内容替换。
请确保您有mimepull.jar在classpath
您可能需要注册MultipartFeature为新泽西文档,本章中所描述8.3.1.2注册 。
创建一个类是这样的:
/**
*
*/
package com.verico.multipart.app;
import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.server.ResourceConfig;
@ApplicationPath("/")
public class MultiPartApp extends ResourceConfig {
public MultiPartApp() {
super(MultiPartFeature.class);
}
}
而下面的init-PARAM添加到您的web.xml中的servlet球衣:
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.verico.multipart.app.MultiPartApp</param-value>
</init-param>
你有一个输入流试过吗?
像 :
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response post(
@Context HttpServletRequest request,
@Context HttpHeaders headers,
@FormDataParam("file") InputStream fileStream,
对我来说工作正常。