我有一个表单,我用文件填充输入并使用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');
}
})
}
});
});
答案 0 :(得分:0)
最好的猜测是快递服务器进程可能没有写入文件夹的权限。运行chmod 777 foldername以授予对要存储文件的文件夹的所有用户的所有访问权限。然后测试它是否有效。如果是,那么您知道这是一个权限问题。附:这些步骤仅用于调试问题。授予文件夹正确的权限。不要将权限保留为777,因为这可能是一个严重的安全问题。