Safari5.xのWebサイトファイルアップロード機能で問題が発生しました。
JQueryは通常、ファイルを正しいContent-Type(image / pngなど)が割り当てられたファイルとしてRESTサービスに送信しますが、Safari 5.xでは、「multipart/form-data」としてのみ送信できるようです。
ジャージーと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;
}
}
誰かが私が間違っていることを指摘してもらえますか?私はジャージーに固執することを望みますが、この時点でどんな実用的な解決策にも満足しています。