AWS S3 multipart file upload with public access

  1. import java.io.File;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;

  5. import com.amazonaws.auth.profile.ProfileCredentialsProvider;
  6. import com.amazonaws.services.s3.AmazonS3;
  7. import com.amazonaws.services.s3.AmazonS3Client;
  8. import com.amazonaws.services.s3.model.AbortMultipartUploadRequest;
  9. import com.amazonaws.services.s3.model.CannedAccessControlList;
  10. import com.amazonaws.services.s3.model.CompleteMultipartUploadRequest;
  11. import com.amazonaws.services.s3.model.InitiateMultipartUploadRequest;
  12. import com.amazonaws.services.s3.model.InitiateMultipartUploadResult;
  13. import com.amazonaws.services.s3.model.PartETag;
  14. import com.amazonaws.services.s3.model.UploadPartRequest;
  15. public class MultipartPublicFileUpload {
  16.     static AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
  17.     static public boolean multiPartFileUploadWithPublicAccess(String existingBucketName, String keyName, String filePath) {
  18.         // Create a list of UploadPartResponse objects. You get one of these
  19.         // for each part upload.
  20.         List<PartETag> partETags = new ArrayList<PartETag>();
  21.         // Step 1: Initialize.
  22.         InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(existingBucketName, keyName);
  23.         initRequest.setCannedACL(CannedAccessControlList.PublicRead);//This is where we are enabling this file for public access
  24.         InitiateMultipartUploadResult initResponse
  25.             = s3Client.initiateMultipartUpload(initRequest);
  26.         File file = new File(filePath);
  27.         long contentLength = file.length();
  28.         long partSize = 5242880; // Set part size to 5 MB.
  29.         try {
  30.             // Step 2: Upload parts.
  31.             long filePosition = 0;
  32.             for (int i = 1; filePosition < contentLength; i++) {
  33.                 // Last part can be less than 5 MB. Adjust part size.
  34.                 partSize = Math.min(partSize, (contentLength - filePosition));
  35.                 // Create request to upload a part.
  36.                 UploadPartRequest uploadRequest = new UploadPartRequest()
  37.                     .withBucketName(existingBucketName).withKey(keyName)
  38.                     .withUploadId(initResponse.getUploadId()).withPartNumber(i)
  39.                     .withFileOffset(filePosition)
  40.                     .withFile(file)
  41.                     .withPartSize(partSize);
  42.                 // Upload part and add response to our list.
  43.                 partETags.add(
  44.                     s3Client.uploadPart(uploadRequest).getPartETag());
  45.                 filePosition += partSize;
  46.             }
  47.             // Step 3: Complete.
  48.             CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(
  49.                 existingBucketName,
  50.                 keyName,
  51.                 initResponse.getUploadId(),
  52.                 partETags);
  53.             s3Client.completeMultipartUpload(compRequest);
  54.             return true;
  55.         } catch (Exception e) {
  56.             s3Client.abortMultipartUpload(new AbortMultipartUploadRequest(
  57.                 existingBucketName, keyName, initResponse.getUploadId()));
  58.             return false;
  59.         }
  60.     }
  61.     public static void main(String[] args) throws IOException {
  62.         String existingBucketName = "myphotowall";
  63.         String keyName = "photo/myuploadedtestfile3.txt";
  64.         String filePath = "/tmp/mytestfile.txt";
  65.         multiPartFileUploadWithPublicAccess(existingBucketName, keyName, filePath);
  66.     }
  67. }
Before you run make sure you have setup the API clients crendentials properly.See http://mohiplanet.blogspot.com/2014/12/setting-up-aws-s3-api-java-client.html

Note * : This will upload file with content type application/x-www-form-urlencoded; charset=utf-8

Please refer to http://mohiplanet.blogspot.com/2014/12/amazon-web-services-s3-api-java-client.html for updating keys with correct content type or setting correct content type with object metadata while uploading.

References :
http://docs.aws.amazon.com/AmazonS3/latest/dev/llJavaUploadFile.html

svn : remove mistakenly added project files and directories within a directory

  1. #Remove unnecessary files and directories by
  2. svn rm file_or_directories
  3. #e.g.
  4. svn rm .settings //directory
  5. svn rm .project //file
  6. svn rm .git //directory
  7. svn rm .idea //directory
  8. #commit all changes
  9. svn commit -m "Your remove message."