मैंने हाल ही में कुछ ऐसा ही किया है। मैंने angular-file-upload का इस्तेमाल किया . आपको नोड-मल्टीपार्टी भी चाहिए फॉर्म डेटा को पार्स करने के लिए आपके एंडपॉइंट के लिए। तब आप s3 का उपयोग कर सकते हैं फ़ाइल को s3 पर अपलोड करने के लिए।
ये रहा मेरा कुछ [संपादित] कोड।
कोणीय टेम्पलेट
<button>
Upload <input type="file" ng-file-select="onFileSelect($files)">
</button>
कोणीय नियंत्रक
$scope.onFileSelect = function(image) {
$scope.uploadInProgress = true;
$scope.uploadProgress = 0;
if (angular.isArray(image)) {
image = image[0];
}
$scope.upload = $upload.upload({
url: '/api/v1/upload/image',
method: 'POST',
data: {
type: 'profile'
},
file: image
}).progress(function(event) {
$scope.uploadProgress = Math.floor(event.loaded / event.total);
$scope.$apply();
}).success(function(data, status, headers, config) {
AlertService.success('Photo uploaded!');
}).error(function(err) {
$scope.uploadInProgress = false;
AlertService.error('Error uploading file: ' + err.message || err);
});
};
मार्ग
var uuid = require('uuid'); // https://github.com/defunctzombie/node-uuid
var multiparty = require('multiparty'); // https://github.com/andrewrk/node-multiparty
var s3 = require('s3'); // https://github.com/andrewrk/node-s3-client
var s3Client = s3.createClient({
key: '<your_key>',
secret: '<your_secret>',
bucket: '<your_bucket>'
});
module.exports = function(app) {
app.post('/api/v1/upload/image', function(req, res) {
var form = new multiparty.Form();
form.parse(req, function(err, fields, files) {
var file = files.file[0];
var contentType = file.headers['content-type'];
var extension = file.path.substring(file.path.lastIndexOf('.'));
var destPath = '/' + user.id + '/profile' + '/' + uuid.v4() + extension;
var headers = {
'x-amz-acl': 'public-read',
'Content-Length': file.size,
'Content-Type': contentType
};
var uploader = s3Client.upload(file.path, destPath, headers);
uploader.on('error', function(err) {
//TODO handle this
});
uploader.on('end', function(url) {
//TODO do something with the url
console.log('file opened:', url);
});
});
});
}
मैंने इसे अपने कोड से बदल दिया है, इसलिए हो सकता है कि यह लीक से हटकर काम न करे, लेकिन उम्मीद है कि यह मददगार होगा!