【问题标题】:How to set permission when uploading file to amazon s3 in android在android中将文件上传到amazon s3时如何设置权限
【发布时间】: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


【解决方案1】:

我只是用这个

TransferObserver transferObserver = transferUtility.upload("acs-android","filename",file,CannedAccessControlList.PublicRead) 

而且效果很好。 确保您没有在 amazon s3 存储桶上设置任何存储桶策略。

【讨论】:

    【解决方案2】:

    你需要在upload()中使用PutObjectRequest

    getTransferManager().upload(
        new PutObjectRequest(String bucketName, String key, File file)
       .withCannedAcl(CannedAccessControlList.PublicRead)
    ); 
    

    【讨论】:

    • 我有这样的代码。但它显示错误。 PutObjectRequest putObjectRequest = new PutObjectRequest( new PutObjectRequest("acs-android", fileTempName, file) .withCannedAcl(CannedAccessControlList.PublicRead) ); TransferObserver transferObserver = transferUtility.upload(putObjectRequest);
    猜你喜欢
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    相关资源
    最近更新 更多