2016-10-27 1 views
0

aws s3에 파일을 업로드하면 android에 있습니다. 성공적으로 업로드되었습니다. 그러나 업로드 된 파일에는 공개 권한이 없습니다. 공개적으로 액세스 할 수 없습니다.android에서 s3을 am3에 업로드 할 때 권한을 설정하는 방법

TransferObserver transferObserver = transferUtility.upload ("appname", "filename", file);

하지만 제가

TransferObserver transferObserver = transferUtility.upload ("ACS-로이드", "이름"파일 CannedAccessControlList.PublicRead)로 코드를 재기록 할 때;

공용 권한 액세스에 오류가 있음을 나타냅니다.

오류 : HTTP 요청을 실행할 수 없습니다. 쓰기 오류 : ssl = 0xb8f43420 : 시스템 호출 중에 입출력 오류, 피어가 연결 재설정.

전체 코드는

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

아직이 문제가 발생합니까? 변경된 유일한 사항은 공개 읽기 권한을 추가하는 것이 확실한가요? – WestonE

답변

0

당신은 그냥이

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

를 사용 upload()

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

나는 이와 같은 코드를 가지고있다. 그러나 그것은 오류를 보여줍니다. PutObjectRequest putObjectRequest = new PutObjectRequest (새 PutObjectRequest ("acs-android", fileTempName, file) .withCannedAcl (CannedAccessControlList.PublicRead)); TransferObserver transferObserver = transferUtility.upload (putObjectRequest); –

+0

코드가 있습니까? – snehasish

0

PutObjectRequest를 사용해야하고 그것을 잘 작동합니다. amazon s3 버킷에 버킷 정책이 설정되어 있지 않은지 확인하십시오.

관련 문제