【问题标题】:File Upload using MEAN stack to AWS EC2 fail使用 MEAN 堆栈将文件上传到 AWS EC2 失败
【发布时间】:2015-12-28 23:59:37
【问题描述】:

我有一个表单,我在其中填写输入和文件,并使用 angularjs 将其作为 JSON 发送到 nodejs 服务器并将其存储到 mongodb 中。在本地主机中,它工作正常。我可以从浏览器上传文件并将其存储到本地存储中。然后,将文件的路径存储到 mongodb 中。

但是当我在 AWS EC2 中部署后执行相同操作时,文件不会出现。不过,mongodb 和 angularjs 的 http.post() 工作正常,因为我能够注册到我的网站,并且用户配置文件成功存储到 mongodb 中,以后也可以登录。问题出在哪里,我想不通? 提前致谢。如果需要任何 sn-ps,请在下方评论。

客户端:(在角度js中)

scotchApp.service('multipartForm', ['$http', function($http){
    this.post = function(uploadUrl, data1, data2){
        var fd = new FormData();
        for(var key in data1)
            fd.append(key, data1[key]);
        fd.append("data2", JSON.stringify(data2));
        $http.post('/upload', fd, {
            transformRequest: angular.indentity,
            headers: { 'Content-Type': undefined }
        });
    }
}])

服务器端:(Nodejs 服务器)

app.post('/upload', function(req, res){
    var property = JSON.parse(req.body.data2);
    var imgPaths = new Array(req.files.file1.path.substring(6),req.files.file2.path.substring(6),req.files.file3.path.substring(6),req.files.file4.path.substring(6),req.files.file5.path.substring(6),req.files.file6.path.substring(6));
    property["imgPaths"] = imgPaths;
    var id = req.body._id;
    var longi = "-";
    var lati = "-";
    var geocoderProvider = 'opencage';
    var httpAdapter = 'https';
    var extra = {
        apiKey: '4996751802785975c32ce8819418c376', 
        formatter: null 
    };
    var geocoder = require('node-geocoder')(geocoderProvider, httpAdapter, extra);
    geocoder.geocode(property.location, function(err, resp) {
        try {
            lati = resp[0].latitude.toString();
            longi = resp[0].longitude.toString();
        }
        catch (excp) {
           console.log(excp);
        }
        finally {
        property['latitude'] = lati ;
        property['longitude'] = longi ;
        var propertyformObj = new PropertiesProfileModel(property);
        propertyformObj.save(function (err, user) {
                if (err) {
                    res.send('error');
                }
                else {
                    res.send('ok');
                }
        })
        }
    });
});

【问题讨论】:

  • 你能把你的代码的相关部分贴出来吗? (客户端上传代码,接收控制器动作代码。)

标签: angularjs node.js amazon-web-services amazon-ec2 mean-stack


【解决方案1】:

最好的猜测是快速服务器进程可能没有写入文件夹的权限。运行 chmod 777 foldername 以授予所有用户对要存储文件的文件夹的所有访问权限。然后测试它是否有效。如果是这样,那么您就知道这是一个权限问题。附言这些步骤仅用于调试问题。授予文件夹正确的权限。不要将权限保留为 777,因为这可能是一个严重的安全问题。

【讨论】:

    猜你喜欢
    • 2017-09-20
    • 2017-11-22
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 2014-06-04
    • 2013-08-15
    相关资源
    最近更新 更多