2014-04-26 5 views
0

각도 및 노드를 사용하여 파일 업로드 양식을 구현하려고합니다. 파일은 잘 업로드되지만, 업로드 디렉토리를 스캔하여 파일 이름이 이미 있는지 확인하려고합니다. 그렇다면 파일의 이름이 바뀝니다. 여기까지 내가 무엇을 가지고 있습니다 :node.js에서 파일의 이름을 바꾸려면 어떻게해야합니까?

app.post('/file', function(req, res) { 
    var fs = require('fs'); 
    var file = req.files.file; 

    // destination directory 
    var dest_dir = './uploads; 
    var filename = file.name; 

    // THIS ISN'T WORKING, I.E., THE FILE IS NOT RENAMED 
    fs.readdir(dest_dir, function(err, dir_files) { 
     for(var i = 0; i < dir_files.length; i++) { 
      if(dir_files[i] == filename) { 
       console.log("I can see this message, but the file isn't renamed"); 
       filename = filename + '_1'; // rename the file 
      } 
     } 
    }); 

    // read file from temp dir and store in permanent dir 
    var source = fs.createReadStream(file.path); 
    var dest = fs.createWriteStream(dest_dir + '/' + filename); 
    source.pipe(dest); 

    source.on('end', function() { res.json("File has been uploaded!") }); 
    source.on('error', function(err) { res.json("There was an error when attempting to upload this file.") }); 
}); 

내가 뭘 잘못하고 있니?

답변

2

노드의 파일 이름을 바꾸기 위해 fs.rename()이 있습니다.

var dest = fs.createWriteStream(dest_dir + '/' + filename); 
source.pipe(dest); 

당신은 콜백 내에서이 코드를 삽입해야합니다 코드는 아래 fs.readDir()의 콜백 내부 루프의 전에 실행되도록

0

fs.readDir()는 비동기 루프에 대해 이후에 실행하려는 경우. 여기서 변경은 다음

app.post('/file', function(req, res) { 
var fs = require('fs'); 
var file = req.files.file; 
var source = fs.createReadStream(file.path); 
var dest; 

// destination directory 
var dest_dir = './uploads; 
var filename = file.name; 

fs.readdir(dest_dir, function(err, dir_files) { 
    for(var i = 0; i < dir_files.length; i++) { 
     if(dir_files[i] == filename) { 
      console.log("I can see this message, but the file isn't renamed"); 
      filename = filename + '_1'; // rename the file 
      break; 
     } 
    } 

    dest = fs.createWriteStream(dest_dir + '/' + filename); 
    source.pipe(dest); 

}); 
source.on('end', function() { res.json("File has been uploaded!") }); 
source.on('error', function(err) { res.json("There was an error when attempting to upload this file.") }); 

});

관련 문제