JAX RSを使用してファイルアップロードの例を設定しようとしています。私はプロジェクトをセットアップし、サーバーの場所にファイルを正常にアップロードすることができました。ファイルサイズが10キロバイト以上の場合は、しかし、私は、私はJAX RSに新しいですcom.sun.jersey.api.client.UniformInterfaceException(応答ステータスが400を返しました)
com.sun.jersey.api.client.UniformInterfaceException: POST http://localhost:9090/DOAFileUploader/rest/file/upload returned a response status of 400
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:607)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:507)
at com.sony.doa.rest.client.DOAClient.upload(DOAClient.java:75)
at com.sony.doa.rest.client.DOAMain.main(DOAMain.java:34)
(変な!!)次のエラーを取得し、私は正確に問題が何であるかわかりません。私はいくつかのパラメータをクライアント側またはサーバー側(サイズ、タイムアウトなど)に設定する必要がありますか?
これは、Webサービスを呼び出すクライアント側のコードです:
public void upload() {
File file = new File(inputFilePath);
FormDataMultiPart part = new FormDataMultiPart();
part.bodyPart(new FileDataBodyPart("file", file, MediaType.APPLICATION_OCTET_STREAM_TYPE));
WebResource resource = Client.create().resource(url);
String response = resource.type(MediaType.MULTIPART_FORM_DATA_TYPE).post(String.class, part);
System.out.println(response);
}
これは、サーバー側のコードです:
@Path("/file")
public class UploadFileService {
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) {
String uploadedFileLocation = "e://uploaded/"
+ fileDetail.getFileName();
writeToFile(uploadedInputStream, uploadedFileLocation);
String output = "File uploaded to : " + uploadedFileLocation;
return Response.status(200).entity(output).build();
}
private void writeToFile(InputStream uploadedInputStream,
String uploadedFileLocation) {
try {
OutputStream out = new FileOutputStream(new File(
uploadedFileLocation));
int read = 0;
byte[] bytes = new byte[16000];
out = new FileOutputStream(new File(uploadedFileLocation));
while ((read = uploadedInputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
} } }
私はファイルを変更する必要がどのような設定を教えてください10キロバイトよりも大きいサイズ?
ありがとうございます!
こんにちはSamuel、writeToFile()メソッドでコードを別途試してみましたが、うまく動作します。私は、プロラムが何であるかはわかりません。 – user732362
Jerseyのどのバージョンを使用していますか?私はファイルをアップロードしますが、私のコードは全く異なります。ジャージ1.12を使用します。 –
e.printStackTrace()を置き換えることもできます。いくつかのログを取得し、Response.status(Status.INTERNAL_SERVER_ERROR).build();を返します。この種のエラーが発生した場合は、問題の理解に役立つかもしれない –