在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称(OpenSource Name):clineamb/gulp-s3-upload开源软件地址(OpenSource Url):https://github.com/clineamb/gulp-s3-upload开源编程语言(OpenSource Language):JavaScript 100.0%开源软件介绍(OpenSource Introduction):gulp-s3-uploadVersion 1.7.3 Use for uploading assets to Amazon S3 servers. This helps to make it an easy gulp task. This package uses the aws-sdk (node). See full details in the Changelog. Install
UsageIncluding + Setting Up Config var gulp = require('gulp');
var s3 = require('gulp-s3-upload')(config); ...where config is something like... var config = {
accessKeyId: "YOURACCESSKEY",
secretAccessKey: "YOUACCESSSECRET"
}
// ...or...
var config = JSON.parse(fs.readFileSync('private/awsaccess.json'));
// ...or to use IAM settings...
var config = { useIAM: true };
// ...or to use IAM w/ S3 config settings ...
var s3 = require('gulp-s3-upload')(
{useIAM:true}, // or {} / null
{ /* S3 Config */ }
); The optional Per AWS best practices, the recommended approach for loading credentials is to use the shared credentials file ( If you want to use an AWS profile in your AWS_PROFILE=myprofile gulp upload If you are using IAM settings, just pass the noted config ( You can also use a node_module like config (+ js-yaml) to load config files in your Feel free to also include credentials straight into your Having AWS Key/Secrets may not be required by your AWS/IAM settings. Errors thrown by the request should give your permission errors. Gulp TaskThe s3 plugin can take a second object parameter that exposes the options hash for the AWS S3 Constructor Property. Please note, if you have different configurations for different upload sets, you'll need to make a different task for each set. You won't need the Create a task. gulp.task("upload", function() {
gulp.src("./dir/to/upload/**")
.pipe(s3({
Bucket: 'your-bucket-name', // Required
ACL: 'public-read' // Needs to be user-defined
}, {
// S3 Constructor Options, ie:
maxRetries: 5
}))
;
}); OptionsBucket (bucket) (required) Type: The bucket that the files will be uploaded to. Other available options are the same as the ones found in the AWS-SDK docs for S3. The end of the readme below for a list of availble AWS-SDK resources that this plugin constantly references. NOTE: gulp-s3-plugin optionscharsetType: Use this to add a charset to the mimetype. etag_hashType: Default: Use this to change the hashing of the files' ETags. The default is MD5. More information on AWS's Common Response Headers can be found here. You shouldn't have to change this, but AWS says the "ETag may or may not be an MD5 diest of the object data", so this option has been implemented should any other case arise. keyTransform (nameTransform)Type: Use this to transform your file names before they're uploaded to your S3 bucket.
(Previously known as gulp.task("upload_transform", function() {
gulp.src("./dir/to/upload/**")
.pipe(s3({
Bucket: 'example-bucket',
ACL: 'public-read',
keyTransform: function(relative_filename) {
var new_name = changeFileName(relative_filename);
// or do whatever you want
return new_name;
}
}))
;
}); maps.ParamName {}Type: Upon reviewing an issue with Each property of the maps option must be a function and must match the paramter being mapped. The files' For example, to define metadataMap and separate expirations in this way: var metadata_collection = { /* your info here */ };
var expirations = { /* your info here */ };
gulp.task("upload", function() {
gulp.src("./dir/to/upload/**")
.pipe(s3({
Bucket: 'example-bucket',
ACL: 'public-read',
maps: {
Metadata: function(keyname) {
path.basename(keyname); // just get the filename
return metadata_collection[keyname]; // return an object
},
Expires: function(keyname) {
path.basename(keyname); // just get the filename
return new Date(expirations[keyname]);
}
}
}));
}); If anything but a function is passed through, nothing will happen. If you want to send a consistent value to all of your files this way, just simply set the option straight in the main options like so: var expires = new Date();
expires.setUTCFullYear(2020);
gulp.task("upload", function() {
gulp.src("./dir/to/upload/**")
.pipe(s3({
Bucket: 'example-bucket',
ACL: 'public-read',
Metadata: {
"example1": "This is an example"
},
Expires: expires
}));
}); metadataMapNOTE: It is preferred you use the maps.ParamsName method to define and map specific metadata to files. Also, if you set both Type: If you have constant metadata you want to attach to each object, just define the object, and it will be included to each file object being upload. If you wish to change it per object, you can pass a function through to modify the metadata based on the (transformed) keyname. Example (passing an gulp.task("upload", function() {
gulp.src("./dir/to/upload/**")
.pipe(s3({
Bucket: 'example-bucket',
ACL: 'public-read',
metadataMap: {
"uploadedVia": "gulp-s3-upload",
"exampleFlag": "Asset Flag"
}
}));
}); Passing the Example (passing a // ... setup gulp-s3-upload ...
var path = require('path');
var metadata_collection = {
"file1.txt": {
"uploadedVia": "gulp-s3-upload",
"example": "Example Data"
},
"file2.html": {
"uploadedVia": "gulp-s3-upload"
}
};
gulp.task("uploadWithMeta", function() {
gulp.src("./upload/**")
.pipe(s3({
Bucket: 'example-bucket',
ACL: 'public-read',
metadataMap: function(keyname) {
path.basename(keyname); // just get the filename
return metadata_collection[keyname]; // return an object
}
}));
}); When passing a function, it's important to note that the file
will already be transformed either by the Note: You should be responsible for handling mismatching/unmatched keynames to the metadata you're mapping. mimeTypeLookupType: Use this to transform what the key that is used to match the MIME type when uploading to S3. gulp.task("upload", function() {
gulp.src("./dir/to/upload/**")
.pipe(s3({
Bucket: 'example-bucket',
ACL: 'public-read',
mimeTypeLookup: function(original_keyname) {
return original_keyname.replace('.gz', ''); // ignore gzip extension
},
}));
}); manualContentEncodingNOTE: It is preferred you use the maps.ParamsName method to define and map specific Content Encoding values to files. If you set both Type: If you want to add a custom content-encoding header on a per file basis, you can
define a function that determines the content encoding based on the keyname.
Defining a Example (passing a gulp.task("upload", function() {
gulp.src("./dir/to/upload/**")
.pipe(s3({
Bucket: 'example-bucket',
ACL: 'public-read',
manualContentEncoding: 'gzip'
}));
}); Example (passing a gulp.task("upload", function() {
gulp.src("./dir/to/upload/**")
.pipe(s3({
Bucket: 'example-bucket',
ACL: 'public-read',
manualContentEncoding: function(keyname) {
var contentEncoding = null;
if (keyname.indexOf('.gz') !== -1) {
contentEncoding = 'gzip';
}
return contentEncoding;
}
}));
}); Post-Upload CallbacksonChangeType: This function gets called with the S3 keyname as the first parameter if the uploaded file resulted in a change. Note the keyname passed is after any Example: gulp.task("upload", function() {
gulp.src("./dir/to/upload/**")
.pipe(s3({
Bucket: 'example-bucket',
ACL: 'public-read',
onChange: function(keyname) {
logChangedFiles(keyname); // or whatever you want
}
}));
}); onNoChangeType: This function gets called with the S3 keyname as the first parameter if the uploaded file did not result in a change, much like onNewType: This function gets called with the S3 keyname as the first parameter if the uploaded file is a new file in the bucket, much like uploadNewFilesOnlyType: Set Stream SupportWhen uploading large files you may want to use Furthermore, the AWS SDK requires us to have a Example: gulp.task("upload", function() {
gulp.src("./dir/to/upload/**", {buffer:false}) // buffer:false for streams
.pipe(s3({
Bucket: 'example-bucket',
ACL: 'public-read'
}));
}); Added by @algesten AWS-SDK References
LicenseCopyright (c) 2015, Caroline Amaba Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论