使用MEAN堆栈向AWS EC2上传文件失败

时间:2015-12-28 23:59:38

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

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

但是当我在AWS EC2中部署后执行相同操作时,文件不会出现。虽然,angularjs的mongodb和http.post()工作正常,因为我能够注册到我的网站并且userprofile成功存储到mongodb中,之后也可以登录。问题出在哪里,我无法弄明白? 提前致谢。如果需要任何片段,请在下面发表评论。

客户端:(在角度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');
                }
        })
        }
    });
});

1 个答案:

答案 0 :(得分:0)

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