当前位置: 首页 > 知识库问答 >
问题:

Android - 改造 - 上传到 AWS S3 且带有预签名 URL 的文件已损坏

傅兴平
2023-03-14

在我的应用程序中,我需要将图像直接上传到AWS S3。为此,我的服务器生成了一个预签名的url,移动客户端使用该url来放置文件。虽然在上传调用中获得了200,但文件没有正确上传,即文件已损坏,并且从未加载回。下面是用于将文件上载到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>() { });

我正在使用改造1.8。

共有2个答案

苍德寿
2023-03-14

固定如下;

当使用< code>RequestBody时,< code>Content-Length头没有携带正确的信息,我也无法覆盖它。因此,我使用了< code>TypedInput而不是< code>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>() { });
孙经艺
2023-03-14

你好 试试这个,如果它有帮助,但我使用了改造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服务=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

 类似资料:
  • 我上传一个文件到AmazonS3有问题。我开发了一个Grails RESTful服务,它使用AWS Java SDK生成预签名URL。当客户端上传一个文件时,它首先检索一个预签名的URL,然后使用这个将文件直接上传到我的S3 bucket。所以我有一个Grails服务,它创建了一个预签名的URL,如下所示...

  • 问题内容: 我正在尝试使用预签名的URL将文件上传到Amazon的S3。我从生成URL的服务器获取URL,并将其作为JSON对象的一部分发送给我。我将URL作为字符串获取,如下所示: https://com-example-mysite.s3-us- east-1.amazonaws.com/userFolder/ImageName?X-Amz-Security- Token=xxfooxx%2F

  • 我有一个从AWS S3预先签署的上传网址上传视频文件。在邮递员上测试视频成功上传。然而,我得到一个403返回时,实施改造。我无法对此任务使用多部分上传。 服务调用: 上传: 我已经确保URL是正确的。内容类型标题也被添加,邮递员截图附后。得到403禁止错误 邮递员截图 我发现了这个相关的问题,但我仍然得到一个403。使用改造2 将文件上传到 AWS S3 预签名 URL 有什么建议吗?

  • 我试图使用S3预签名的PUT url执行文档上传。我使用java AWSSDK(GeneratePresignedUrlRequest.java)生成url。此url生成代码位于AWS API网关后面的lambda函数中。 然而,当我在Postman中复制生成的url时,我遇到了以下错误 生成的url是“https:// 关于在生成url时需要更正的内容,有什么建议吗?

  • 我已经使用我的后端代码生成了预先设计的URL,然后使用该URL上传了一个在会话期间录制的视频。我在前端使用下面的代码(React JS)来上传视频,预检似乎失败了,因为403禁止,post请求失败了,因为cors错误。请查看以下详细信息: 使用的代码: 控制台错误:访问“获取时间”https://xxxxxxxxxx“起源”http://localhost:5000'已被CORS策略阻止:对飞行前