[英]File is getting corrupted while uploading using nodeJS
這是我的服務器代碼
app.post('/tde/api/photo/:widgetId/:choosenFileName',function(req,res){
console.log("In file Upload..");
console.log(req.params.widgetId);
console.log(req.params.choosenFileName);
res.writeHead(200, { 'Content-Type': 'application/binary' });
var filedata = '';
req.setEncoding('binary');
req.on('data', function(chunk){
filedata+= chunk;
})
req.on('end', function (chunk) {
var dir = 'uploads/'+req.params.widgetId
if (!fs.existsSync(dir)){
fs.mkdirSync(dir);
console.log("directory created..");
}
var fileName = req.params.choosenFileName;
var widgetId = req.params.widgetId;
fs.writeFile('uploads/'+widgetId+'/'+fileName, filedata, 'binary', function(err) {
if (err) {
return console.error(err);
}
})
});
res.end("File is uploaded");
})
這是我的客戶端代碼。 這是我的html文件,允許用戶選擇一個文件,然后將其上傳到服務器位置
<div class="col-xs-8">
上傳圖片
<span class="warn_msg" ng-if="warningModalWidgetSettingsURLMessage1 != ''"><i class="glyphicon glyphicon-remove-circle"></i> {{warningModalWidgetSettingsURLMessage1}} </span> </div> This is my js file which calls the api of nodejs server $scope.widgetForm.imageConfig = {}; var imageLocationUrl = "http://10.100.10.140/opt/TDE/tde_v2.0-19-01-2016Sanmoy/uploads/" var imageWidgetId = ""; var choosenFileName = ""; $scope.submitFile = function(widgetId){ imageWidgetId = widgetId console.log($scope.fileImage)//this is the file name which I a choosenFileName = $scope.fileImage.name $http({ url: "http://10.100.10.140:9001/tde/api/photo/"+widgetId+"/"+choosenFileName, method: "POST", headers: { 'Content-Type': 'application/binary' }, data: $scope.fileImage, processData: false, contentType: false }).success(function(data, status) { console.log("File Uploaded..") }).error(function(data, status) { console.log("File Upload fail..") }) }
文件正在服務器中上載,但有時它已損壞,無法理解問題出在哪里。
似乎每次上載完成時都會覆蓋“ uploads / report.jpg”,這可能會導致同時進行多個上載期間的損壞:
function(err) {
var fileName = req.params.choosenFileName;
var widgetId = req.params.widgetId;
fs.writeFile('uploads/report.jpg', chunk, function(err) {
if (err) {
return console.error(err);
}
})
那注釋行呢:
//fs.writeFile('uploads/'+req.params.widgetId+'/sanmoy.jpg', chunk,
這樣可能會更好:
fs.writeFile('uploads/'+req.params.widgetId+'/'+fileName', chunk,
請注意,仍然可以上傳兩個或多個具有相同“ fileName”的文件,因此添加某種前綴或后綴可能會更好。
更新1:
我只是注意到您只保存了第一塊。 數據可以容納一個塊,但也可以包含多個塊。 嘗試這樣的事情:
var filedata = '';
req.setEncoding('binary');
req.on('data', function(chunk){
filedata+= chunk;
})
req.on('end', function(){
// create directory etc.
fs.writeFile('uploads/'+req.params.widgetId+'/'+fileName, filedata, 'binary', function(err){
if (err) {
return console.error(err);
})
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.