2014-03-12 22 views
5

我有一個android應用程序,其功能是將圖像上傳到AWS(Amazon Web Service)S3。當我第一次成功運行這個應用程序圖像上傳。但是當我第二次上傳圖像時,我正在收到跟隨錯誤。我該如何解決這個錯誤?android aws錯誤代碼存儲桶已由您擁有

以下是錯誤:

enter image description here

這裏是我的活動:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // getActionBar().setDisplayShowTitleEnabled(false); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    s3Client.setRegion(Region.getRegion(Regions.US_WEST_2)); 
    setContentView(R.layout.submit); 

    submit = (Button) findViewById(R.id.buttonsubmit); 
    submit.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      Uri selectedImage = Uri.parse(Environment 
        .getExternalStorageDirectory().getPath() 
        + File.separator 
        + "Pictures" 
        + File.separator 
        + "Spike" + File.separator + "cubicasa.jpg"); 

      new S3PutObjectTask().execute(selectedImage); 



     } 
    }); 

} 
private class S3PutObjectTask extends AsyncTask<Uri, Void, S3TaskResult> { 

    ProgressDialog dialog; 

    protected void onPreExecute() { 
     dialog = new ProgressDialog(SubmitActivity.this); 
     dialog.setMessage(SubmitActivity.this.getString(R.string.uploading)); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 

    protected S3TaskResult doInBackground(Uri... uris) { 



     if (uris == null || uris.length != 1) { 
      return null; 
     } 

     // The file location of the image selected. 
     String filepath = Environment.getExternalStorageDirectory() 
       .toString() 
       + File.separator 
       + "Pictures" 
       + File.separator 
       + "Spike" + File.separator + "cubicasa.jpg"; 
     Uri selectedImage = Uri.fromFile(new File(filepath)); 
     // Uri selectedImage = 
     // Uri.parse("content://media/external/images/media/40894"); 

     String URLLLLLLLLL = selectedImage.toString(); 
     Log.e("uRLLLLLLLLLLLLLL", URLLLLLLLLL); 
     ContentResolver resolver = getContentResolver(); 

     ObjectMetadata metadata = new ObjectMetadata(); 
     metadata.setContentType(resolver.getType(selectedImage)); 

     S3TaskResult result = new S3TaskResult(); 

     // Put the image data into S3. 
     try { 
      s3Client.createBucket(Constants.getPictureBucket()); 

      PutObjectRequest por = new PutObjectRequest(
        Constants.getPictureBucket(), Constants.PICTURE_NAME, 
        resolver.openInputStream(selectedImage), metadata); 
      s3Client.putObject(por); 
     } catch (Exception exception) { 

      result.setErrorMessage(exception.getMessage()); 
     } 

     return result; 
    } 

    protected void onPostExecute(S3TaskResult result) { 

     dialog.dismiss(); 

     if (result.getErrorMessage() != null) { 

      displayErrorAlert(
        SubmitActivity.this 
          .getString(R.string.upload_failure_title), 
        result.getErrorMessage()); 
     } else { 
      Toast toast = Toast.makeText(getApplicationContext(), 
        "Uploaded Successfully", Toast.LENGTH_SHORT); 
      toast.show(); 

     } 
    } 
} 

這裏是我的constantclass:

public class Constants { 

public static final String ACCESS_KEY_ID = "accesskey"; 
public static final String SECRET_KEY = "secretkey"; 

public static final String PICTURE_BUCKET = "picture-bucket5"; 
public static final String PICTURE_NAME = "NameOfThePicture5"; 


public static String getPictureBucket() { 
    return ("bd.dse.test" + ACCESS_KEY_ID + PICTURE_BUCKET).toLowerCase(Locale.US); 
} 

任何幫助將不勝感激。提前致謝。

+1

你可以創建水桶只有一次createBucket()當過你的圖像保存在水桶,每次不調用此方法.. –

+0

@RajaReddyPolamReddy,兄弟,我怎麼能做到這一點?請幫幫我。我需要改變的地方? –

回答

5

從您的代碼:您每次都在創建存儲桶,不這樣做會導致存儲桶重複。使用名稱(字符串)創建桶一次,如下面的代碼。

s3Client.createBucket("images"); 

從病房下次不要把這種創造桶在你的代碼,只是把圖像在水桶這樣下面的代碼。

S3.createObjectForBucket("images", Token, _Image); 
+0

非常感謝你的兄弟。 –