【发布时间】:2017-03-09 17:11:55
【问题描述】:
在 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());
}
});
}
}
【问题讨论】:
-
这种情况还在发生吗?你确定唯一改变的是添加公共读取权限吗?
标签: android amazon-web-services file-upload amazon-s3