2017-05-30 49 views
0

在我的应用程序中,我需要将图像直接上传到AWS S3。为此,我的服务器生成一个预先签名的URL和移动客户端,使用该URL将PUT文件打开。虽然获得200上传电话,文件没有正确上传,即它是腐败的,永远不会加载回来。 以下是用于将文件上传到S3的代码。Android - 翻新 - 使用预签名url上载到AWS S3的文件已损坏

public static interface FileUploadService { 
    @PUT("/") 
    void upload(@Body() RequestBody body, 
       Callback<Object> callback); 
} 


ServiceGenerator.getUploadService(url).upload(
        RequestBody.create(MediaType.parse("image/jpeg"), image), 
        new Callback<Object>() { }); 

我正在使用Retrofit 1.8。

+0

为什么不从AWS s3服务上传文件,而不是使用翻新 –

+0

它是否发生在REST客户端中? –

+0

@AbdulKawee我没有得到你想说的。 – Ammar

回答

0

您好试试这个,如果有帮助,但我用改造2,

摇篮

compile 'com.squareup.retrofit2:retrofit:2.0.2' 

接口

public static interface FileUploadService { 
    @Multipart 
    @POST(HttpConstants.FILEUPLOADJSON1) 
    Call<Result> uploadImage(@Part MultipartBody.Part file, @Part("stdID") int stdID); 
} 

呼叫

RaytaApi service = RaytaServiceClass.getApiService();

File file = new File(imagePath); 

    RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); 


    MultipartBody.Part body = 
      MultipartBody.Part.createFormData("uploaded_file", file.getName(), requestFile); 

    Call<Result> resultCall=service.uploadImage(body,INT_STDID); 
    final Result[] result = {new Result()}; 

    resultCall.enqueue(new Callback<Result>() { 
     @Override 
     public void onResponse(Call<Result> call, Response<Result> response) { 
      Log.v("@@@WWE","Respnse"); 
      } 
     } 

     @Override 
     public void onFailure(Call<Result> call, Throwable t) { 

      Log.v("@@@WWE","Failure "); 
      Log.v("@@@WWE","MEssage "+t.getMessage()); 
     } 
    }); 

对于完整的例子全球化志愿服务青年,请访问 https://github.com/pratikvyas1991/NetworkingExample-master

+0

@Ammar帮助 –

+0

我无法更新到Retrofit2,因为在这种情况下需要对其他很多API进行修改。我已经解决了这个问题。很快就会发布答案。 – Ammar

0

修正如下;

当使用RequestBody时,Content-Length标题未携带正确的信息,我也无法覆盖它。所以,我用TypedInput而不是RequestBody。我的服务界面如下所示。

public static interface FileUploadService { 
    @PUT("/") 
    void upload(@Body TypedInput body, Callback<Object> callback); 
} 

并将图像上传为;

ServiceGenerator.getUploadService(url).upload(new TypedFile("image/*", file), 
               new Callback<Object>() { }); 
+1

你可以发布更多的代码。我被困在这里 –