使用PUT将文件上传到Android中的S3

时间:2017-01-25 07:54:47

标签: android file-upload amazon-s3 retrofit2

我正在尝试将文件上传到AWS s3。我已经有一个有效的网址,文件将被上传(由服务器提供),所以我真的不需要AWS凭证。我只需要在该URL上发送一个要上传的文件的PUT请求。

以前我使用的是Volley API,我将File转换为字节数组并将其用作请求体。

FileInputStream fis = new FileInputStream(fileToUpload);
        int transferredBytes = 0;
        int totalSize = (int) fileToUpload.length();
        bis = new BufferedInputStream(fis);
        int bufferLength;

        byte[] buffer = new byte[1024];
        while ((bufferLength = bis.read(buffer)) > 0) {
            bos.write(buffer, 0, bufferLength);
            transferredBytes += bufferLength;
            progressListener.onProgress(transferredBytes, totalSize);
        }

代码正在运行,但有其缺陷。从代码中可以看出,有一个进度监听器,它基本上是将字节写入OutputStream的进程。我认为这并不意味着它已经上传了,因为当进度为100%时,文件上传成功/错误回调之间会出现暂时的空闲状态。

现在,我正在转向Retrofit 2,(与项目中的所有网络功能一起)。我对基本的REST操作没有任何问题,仅针对上传部分。我找不到任何关于如何实施它的指南。

我尝试过搜索,但大部分结果都需要使用AWS SDK或使用Multipart,这在我的要求中不适用。

基本上我有这些问题:

  • 如何在Retrofit(PUT)
  • 中实现文件上传到网址
  • 如何获取实际上传的进度监听器,而不是像我之前的代码

0 个答案:

没有答案