在android中我将文件上传到aws s3。它已成功上传。但上传的文件没有公开权限。它无法公开访问。
TransferObserver transferObserver = transferUtility.upload(" appname"," filename",file);
但是当我将代码重写为
时TransferObserver transferObserver = transferUtility.upload(" acs-android"," filename",file,CannedAccessControlList.PublicRead);
用于访问公共权限,它显示错误。
错误:无法执行HTTP请求:写入错误:ssl = 0xb8f43420:系统调用期间的I / O错误,由对等方重置连接。
完整的代码是
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.amazonaws.auth.CognitoCachingCredentialsProvider;
import com.amazonaws.mobileconnectors.s3.transferutility.TransferListener;
import com.amazonaws.mobileconnectors.s3.transferutility.TransferObserver;
import com.amazonaws.mobileconnectors.s3.transferutility.TransferState;
import com.amazonaws.mobileconnectors.s3.transferutility.TransferUtility;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.AccessControlList;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.GroupGrantee;
import com.amazonaws.services.s3.model.Permission;
import com.amazonaws.services.s3.model.Region;
import java.io.File;
public class MainActivity extends AppCompatActivity {
Button button;
File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard,"filename");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fileUpload();
}
});
}
private void fileUpload() {
// Initialize the Amazon Cognito credentials provider
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(),
"xxx:7e4xxx-xxxxxxxxx-xx-48cfc8f79f6", // Identity Pool ID
Regions.REGION // Region
);
AmazonS3 s3 = new AmazonS3Client(credentialsProvider);
s3.setRegion(com.amazonaws.regions.Region.getRegion(Regions.REGION));
TransferUtility transferUtility = new TransferUtility(s3, this);
TransferObserver transferObserver = transferUtility.upload("appname","filename",file,CannedAccessControlList.PublicRead);
transferObserver.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
if(state == TransferState.COMPLETED) {
Toast.makeText(MainActivity.this,"Error",Toast.LENGTH_SHORT).show();
}
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
}
@Override
public void onError(int id, Exception ex) {
Log.e("LOGTAG", "Error : " + ex.getMessage());
}
});
}
}
答案 0 :(得分:0)
您需要在PutObjectRequest
upload()
getTransferManager().upload(
new PutObjectRequest(String bucketName, String key, File file)
.withCannedAcl(CannedAccessControlList.PublicRead)
);
答案 1 :(得分:0)
我只是用这个
TransferObserver transferObserver = transferUtility.upload("acs-android","filename",file,CannedAccessControlList.PublicRead)
它工作正常。 确保您没有在亚马逊s3桶上设置任何存储桶策略。