我无法解决如何将图像从Android上传到Amazon S3的问题。 我已经获得了一个API,我可以从中获取signedRequest和URL。我应该用它来上传图片。 我使用改造来获取API的响应,我得到了signedRequest和网址,但我们不知道如何继续使用它们从设备的图库上传图片。
以下是我从API中获得的反应(已编辑完的个人信息):
{"signedRequest": "https://test-name.s3.amazonaws.com/59a7ee45j2407504349ef4?AWSAccessKeyId=EKJJOHFINVRB2VL7LQ&Content-Type=image&Expires=1504177793&Signature=43ajtX%90841haoA8VsFe6xC57hedQ%3D&x-amz-acl=public-read",
"url": "https://test-name.s3.amazonaws.com/59a7ee45j2407504349ef4"}
这是我用于获取上述数据的改造界面:
@GET("/sign-s3")
Call<S3Sign> getSignedUrl(
@Query("token") String token,
@Query("file-type") String fileType);
最后来自我的活动代码:
Button signed = (Button)findViewById(R.id.signedBtn);
signed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ApiInterface service = RestClient.getClient();
Call<S3Sign> call = service.getSignedUrl(token, fileType);
call.enqueue(new Callback<S3Sign>() {
@Override
public void onResponse(Call<S3Sign> call, Response<S3Sign> response) {
int statusCode = response.code();
S3Sign s3Sign = response.body();
if(statusCode == 200){
Log.d("SignedRequest: ", s3Sign.getSignedRequest());
Log.d("URL: ", s3Sign.getUrl());
}
else {
Toast.makeText(TestActivity.this, "Error", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<S3Sign> call, Throwable t) {
Log.d("Failure", t.getMessage());
}
});
}
});
我应该如何继续使用从API获取的数据将图像从我的设备的图库上传到S3服务?
答案 0 :(得分:0)
1
如果有任何带有某些ID或密钥的签名请求,那么请输入url plus key来发送响应。 首先获得响应200,您可以尝试以下步骤发送图像
注意:如果获取响应200,则在状态代码上,然后使用requestbody从multipart或Hashmap创建文件部分。如果它们是要传递图像的任何参数,那么也添加该参数。并且您的图像已提交给服务器。
2。 如果您没有后端,请查看此链接amazon aws upload
3。 最简单的...... //在应用程序内的清单文件中注册
<service
android:name="com.onecode.s3.service.S3UploadService"
android:exported="false" />
S3Credentials s3Credentials = new S3Credentials(accessKey, secretKey, sessionToken);
S3BucketData s3BucketData = new S3BucketData.Builder()
.setCredentials(s3Credentials)
.setBucket(bucket)
.setKey(key)
.setRegion(region)
.build();
S3UploadService.upload(getActivity(), s3BucketData, imagefile to upload, null);
// build.gradle中的依赖
compile 'com.github.OneCodeLabs:S3UploadService:1.0.0@aar'