Javascript 使用aws sdk nodejs上传aws s3文件
我试图从用户{angularjs frontend}将一个文件上传到aws s3 bucket,并将该文件解析为nodejs api路由,但不断收到错误:“TypeError:无法读取未定义的属性'file'。。我可以通过发送带有文件的post请求从postman(chrome扩展名)上传文件,但我不知道如何将文件从angular解析到node js。下面是我正在做的: //节点代码:Javascript 使用aws sdk nodejs上传aws s3文件,javascript,angularjs,node.js,amazon-web-services,amazon-s3,Javascript,Angularjs,Node.js,Amazon Web Services,Amazon S3,我试图从用户{angularjs frontend}将一个文件上传到aws s3 bucket,并将该文件解析为nodejs api路由,但不断收到错误:“TypeError:无法读取未定义的属性'file'。。我可以通过发送带有文件的post请求从postman(chrome扩展名)上传文件,但我不知道如何将文件从angular解析到node js。下面是我正在做的: //节点代码: router.post('/user/upload', multipartMiddleware, functi
router.post('/user/upload', multipartMiddleware, function(req, res){
var file = req.files.file;
var body = fs.createReadStream(file.path);
var filename = 'post7/media.jpg';
var s3bucket3 = new AWS.S3();
s3bucket3.createBucket({Bucket: 'artistarc-user-post-media'}, function() {
var data = {Bucket: 'artistarc-user-post-media', Key: filename, Body: body};
s3bucket3.putObject(data, function(err, data) {
if (err) {
console.log("Error uploading data: ", err);
} else {
console.log("Successfully uploaded data to Bucket");
}
});
});
res.end('Uploaded');
});
myApp.controller('galleryController', ['$scope', 'Api', function($scope, Api){
console.log('galleryController');
$scope.file = [];
$scope.uploadFile = function(){
Api.MediaUpload.save({}, $scope.file, function(){
console.log('uploaded');
});
}
}]);
//ANGULARJS控制器:
router.post('/user/upload', multipartMiddleware, function(req, res){
var file = req.files.file;
var body = fs.createReadStream(file.path);
var filename = 'post7/media.jpg';
var s3bucket3 = new AWS.S3();
s3bucket3.createBucket({Bucket: 'artistarc-user-post-media'}, function() {
var data = {Bucket: 'artistarc-user-post-media', Key: filename, Body: body};
s3bucket3.putObject(data, function(err, data) {
if (err) {
console.log("Error uploading data: ", err);
} else {
console.log("Successfully uploaded data to Bucket");
}
});
});
res.end('Uploaded');
});
myApp.controller('galleryController', ['$scope', 'Api', function($scope, Api){
console.log('galleryController');
$scope.file = [];
$scope.uploadFile = function(){
Api.MediaUpload.save({}, $scope.file, function(){
console.log('uploaded');
});
}
}]);
/EJS tempelate
<form>
<button type="button" class="btn btn-default btn-trans btn-sm" ng-click = "uploadFile()">
<span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span>
Upload
</button>
<input type = "file" name = "file" ng-model="file" file/></div>
</form>
顺便说一句,Aweasome Amazon允许您直接从客户端上传文件,就像从用户浏览器上传一样,而无需通过服务器。通过新的Lambda功能,您可以在上传文件时直接更改存储桶中的文件,例如生成不同大小的新图像等。感谢adeno。。你指的是aws sdk js吗?我试过了,它成功了。但是我很困惑。如果我从客户端而不是服务器端使用上传部分,会安全吗?就像其他任何东西一样安全,而且你的服务器上没有增加流量,文件直接进入AWS。当然,这也意味着如果AWS宕机,它就会失败,但失败的可能性可能很小。好吧,那么客户端就是。愚蠢的问题,但我必须问…galleryController是否已分配给您的表单?因为如果没有,这将解释为什么
$scope.file
没有定义。您可以通过打开web检查器,单击表单元素,并在控制台中键入angular.element($0.scope()
)来进行测试。检查以确保作用域包含文件
属性。