如何通过Okhttp3和Android将文件上传到Amazon S3

我把我的服务器的响应与亚马逊的证书发送一个文件,像这样一个文件,amazon s3url( https://exapmple-bucket.s3-us-west-2.amazonaws.com “)和json(”凭据“variables) :

"key":"somecache${filename}", "success_action_status":"201", "acl":"public-read", "policy:"lagrepolicy", "x-amz-credential":"somecredential2/s3/aws4_request\", "x-amz-algorithm":"some", "x-amz-date":"somedate", "x-amz-signature":"some" 

然后,我必须上传这个数据的文件到amazon s3,我的测试代码在Kotlin(java代码几乎相同):

 val requestBodyS3 = MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("key",credentials.getString("key")) .addFormDataPart("success_action_status", credentials.getString("success_action_status")) .addFormDataPart("acl",credentials.getString("acl")) .addFormDataPart("policy",credentials.getString("policy")) .addFormDataPart("x-amz-credential", credentials.getString("x-amz-credential")) .addFormDataPart("x-amz-algorithm", credentials.getString("x-amz-algorithm")) .addFormDataPart("x-amz-date", credentials.getString("x-amz-date")) .addFormDataPart("x-amz-signature", credentials.getString("x-amz-signature")) .addFormDataPart("file", "file", RequestBody.create((MEDIA_TYPE_FILE), file)) .build() // val MEDIA_TYPE_FILE = MediaType.parse("image/jpeg") 

我用这个代码收到的“文件”(来自图库):

 intent.setType("image/*") startActivityForResult(intent, RC_CODE_PICK) .. onActivityResult: val selectedImage = data?.data val file = File(selectedImage?.path) // my file to upload 

有了这个requestBody没有任何行动或从亚马逊服务器的答案,但没有文件部分我得到的答案。 我的问题 – 如何从okhttp和Android正确地发送文件到亚马逊S3? 还有一个问题 – 发送文件时是否使用真实路径或Android路径?

UPD。 解决:我已经在23 API上测试了我的应用程序,并且存在危险的权限问题。 我的代码由于存储权限而无法访问文件