我们在 Safari 5.x 的网站文件上传功能中遇到了问题。
JQuery 通常将文件作为分配了正确内容类型(例如 image/png)的文件发送到 REST 服务,但是对于 Safari 5.x,它似乎只能将其作为“multipart/form-data”发送
我尝试通过 Jersey 和 RestEasy 添加新的端点来接受这个,但我没有成功。
我相信问题只是我无法确定参数应该是什么。无论我尝试什么,它似乎都会导致 415 响应。
客户端发送的请求(我无法控制)如下所示: 注意:它只是一个文件,但它似乎支持多个文件。
标题
Accept:application/json, text/javascript, */*; q=0.01
Content-Type:multipart/form-data; boundary=----WebKitFormBoundary15QUDazCkPkvqWTQ
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2
有效载荷
------WebKitFormBoundary15QUDazCkPkvqWTQ
Content-Disposition: form-data; name="files[]"; filename="myFile.png"
Content-Type: image/png
------WebKitFormBoundary15QUDazCkPkvqWTQ--
我在 API 端尝试了以下两种方法:
球衣
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadMultipart(FormDataMultiPart multiPart) throws IOException{
List<FormDataBodyPart> fields = multiPart.getFields("files");
for(FormDataBodyPart field : fields){
InputStream inputStream = field.getValueAs(InputStream.class);
}
// respond...
}
高枕无忧
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadMultipart(@MultipartForm UploadForm form) {
System.out.println(form.getFile().length);
System.out.println(form.getName());
//respond...
}
public class UploadForm {
private String name;
private File file; /// Have tried various Objects & Arrays here - all with no success;
@FormParam("filename")
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@FormParam("files")
public void setFile(File file) {
this.file = file;
}
public File[] getFile() {
return file;
}
}
有人可以指出我做错了什么吗?我宁愿坚持使用泽西岛,但对目前任何可行的解决方案感到高兴。