FileUpload to AWS
Upload File to AWS s3 bucket using spring rest API.
Upload file to s3 bucket
Section titled “Upload file to s3 bucket”Here we will create a rest APi which will take file object as a multipart parameter from front end and upload it to S3 bucket using java rest API.
Requirement :- secrete key and Access key for s3 bucket where you wanna upload your file.
code:- DocumentController.java
@RestController@RequestMapping("/api/v2")public class DocumentController {
private static String bucketName = "pharmerz-chat"; // private static String keyName = "Pharmerz"+ UUID.randomUUID();
@RequestMapping(value = "/upload", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA) public URL uploadFileHandler(@RequestParam("name") String name, @RequestParam("file") MultipartFile file) throws IOException {
/******* Printing all the possible parameter from @RequestParam *************/
System.out.println("*****************************");
System.out.println("file.getOriginalFilename() " + file.getOriginalFilename()); System.out.println("file.getContentType()" + file.getContentType()); System.out.println("file.getInputStream() " + file.getInputStream()); System.out.println("file.toString() " + file.toString()); System.out.println("file.getSize() " + file.getSize()); System.out.println("name " + name); System.out.println("file.getBytes() " + file.getBytes()); System.out.println("file.hashCode() " + file.hashCode()); System.out.println("file.getClass() " + file.getClass()); System.out.println("file.isEmpty() " + file.isEmpty());
/*************Parameters to b pass to s3 bucket put Object **************/ InputStream is = file.getInputStream(); String keyName = file.getOriginalFilename();
// Credentials for Aws AWSCredentials credentials = new BasicAWSCredentials("AKIA*************", "zr**********************");
/****************** DocumentController.uploadfile(credentials); ***************************/
AmazonS3 s3client = new AmazonS3Client(credentials); try { System.out.println("Uploading a new object to S3 from a file\n"); //File file = new File(awsuploadfile); s3client.putObject(new PutObjectRequest( bucketName, keyName, is, new ObjectMetadata()));
URL url = s3client.generatePresignedUrl(bucketName, keyName, Date.from(Instant.now().plus(5, ChronoUnit.MINUTES))); // URL url=s3client.generatePresignedUrl(bucketName,keyName, Date.from(Instant.now().plus(5, ChronoUnit.))); System.out.println("************************************"); System.out.println(url);
return url;
} catch (AmazonServiceException ase) { System.out.println("Caught an AmazonServiceException, which " + "means your request made it " + "to Amazon S3, but was rejected with an error response" + " for some reason."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (AmazonClientException ace) { System.out.println("Caught an AmazonClientException, which " + "means the client encountered " + "an internal error while trying to " + "communicate with S3, " + "such as not being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); }
return null;
}
}Front end Function
var form = new FormData();form.append("file", "image.jpeg");
var settings = { "async": true, "crossDomain": true, "url": "http://url/", "method": "POST", "headers": { "cache-control": "no-cache" }, "processData": false, "contentType": false, "mimeType": "multipart/form-data", "data": form}
$.ajax(settings).done(function (response) { console.log(response);});