转载自:https://gist.github.com/guumaster/9f18204aca2bd6c71a24
生成预签名的Demo文档:https://docs.aws.amazon.com/zh\_cn/AmazonS3/latest/dev/PresignedUrlUploadObjectJavaSDK.html
前端写法:
生成签名:(.js)
1 var s3 = new AWS.S3({
2 accessKeyId: '<YOUR_ACCESS_KEY>',
3 secretAccessKey: '<YOUR_SECRET_ACCESS_KEY>'
4 });
5
6 var uploadPreSignedUrl = s3.getSignedUrl('putObject', {
7 Bucket: '<THE_BUCKET_NAME>',
8 Key: '<THE_UPLOADED_FILENAME>',
9 ACL: 'authenticated-read',
10 // This must match with your ajax contentType parameter
11 ContentType: 'binary/octet-stream'
12
13 /* then add all the rest of your parameters to AWS puttObect here */
14 });
15
16 var downloadPreSignedUrl = s3.getSignedUrl('getObject', {
17 Bucket: '<THE_BUCKET_NAME>',
18 Key: '<THE_UPLOADED_FILENAME>',
19 /* set a fixed type, or calculate your mime type from the file extension */
20 ResponseContentType: 'image/jpeg'
21 /* and all the rest of your parameters to AWS getObect here */
22 });
23
24 // now you have both urls
25 console.log( uploadPreSignedUrl, downloadPreSignedUrl );
前端页面:(.html)
1 <form id="theForm" method="POST" enctype="multipart/form-data" >
2 <input id="theFile" name="file" type="file"/>
3 <button id="theButton" type="submit">send 1</button>
4 </form>
5
6 After you uploaded the file you can <a href="<YOUR_PRE_SIGNED_DOWNLOAD_URL_HERE>">download it here</a>
7 <script src="upload.js"></script>
upload:(.js)
1 // Remember to include jQuery somewhere.
2
3 $(function() {
4
5 $('#theForm').on('submit', sendFile);
6 });
7
8 function sendFile(e) {
9 e.preventDefault();
10
11 // get the reference to the actual file in the input
12 var theFormFile = $('#theFile').get()[0].files[0];
13
14 $.ajax({
15 type: 'PUT',
16 url: "<YOUR_PRE_SIGNED_UPLOAD_URL_HERE>",
17 // Content type must much with the parameter you signed your URL with
18 contentType: 'binary/octet-stream',
19 // this flag is important, if not set, it will try to send data as a form
20 processData: false,
21 // the actual file is sent raw
22 data: theFormFile
23 })
24 .success(function() {
25 alert('File uploaded');
26 })
27 .error(function() {
28 alert('File NOT uploaded');
29 console.log( arguments);
30 });
31
32 return false;
33 });
34 }