2017-10-27 3 views
0

태블릿에서 문서를 업로드하기위한 시스템을 사용해보십시오. 멀터 및 익스프레스 사용 4Node.js 유사한 게시물 업로드

2 개 또는 3 개의 장치를 동시에 사용하는 동안 모든 사항이 정상이지만 더 많은 장치를 추가하면 파일 이름 문제가 발생합니다. Multer는 모든 업로드에 동일한 파일 이름을 제공합니다 (console.log(storedFile + " " + idPatient);보기). 어쩌면 무언가 잘못되었지만 정확히 무엇인지 알 수 없습니다.

app.post("/api/Upload", jsonParser, function(req, res) { 

var saveFilename = "", 
    savePath = "", 
    savePathForSql = "", 
    fileToSave = ""; 
var idDocument = 0, 
    idPatient = 0, 
    idDoctor = 0; 
var uploadRequest = ""; 

var f = "queryLog.txt"; 


async.series([ 
    function(callback) { 
     upload = multer({ storage: Storage }).single("imgUploader"); 
     upload(req, res, function(err) { 

      if (err) { 
       console.log(err); 
       return res.end("Something went wrong!"); 
      } 
      fileToSave = storedFile; 
      uploadRequest = req; 
      idDocument = JSON.parse(req.body.json)['id_doc_type']; 
      idPatient = JSON.parse(req.body.json)['id_patient']; 
      idLogin = JSON.parse(req.body.json)['id_login']; 
      mv("Images" + separator + fileToSave, idPatient + ".jpg", function(err) { 
       if (err) { 
        console.log(err);      
       } else {       
        return res.end("File uploaded sucessfully! "); 
       } 
      }); 

      console.log(storedFile + " " + idPatient); 
      callback(); 
     }); 
    }, 
    function(callback) { 
     var request = new sql.Request() 
     var q1 = "exec storedproc"; 
     request.query(q1, (err, result) => { 
      if (err) return callback(err); 
      console.log(result.recordset[0]); 
      savePath = result.recordset[0]['path']; 
      savePathForSql = savePath; 
      if (os != 'linux') { 
       savePath = savePath.replaceAll("/", "\\"); 
      } 
      if (!fs.existsSync(f)) { 
       fs.writeFileSync(f, q1 + "\r\n", 'utf-8'); 
      } else { 
       fs.appendFileSync(f, q1 + "\r\n", 'utf-8'); 
      } 
      saveFilename = result.recordset[0]['filename']; 
      console.log(savePath + "/" + saveFilename); 
      callback(); 
     }) 
    }, 

    function(callback) { 
     mkdirp(basePath + savePath, function(err) { 
      mv("Images" + separator + idPatient + ".jpg", basePath + savePath + separator + saveFilename, function(err) { 
       if (err) { 
        console.log(err); 
        console.log("Move failed: Images/" + idPatient + ".jpg" + " to " + basePath + savePath + separator + saveFilename); 
       } else { 
        console.log('Move complete. Images/' + idPatient + ".jpg" + " to " + basePath + savePath + separator + saveFilename); 
        return res.end("File uploaded sucessfully! "); 
       } 
      }); 
     }); 
     callback(); 
    } 
], function(err) { 
    var request2 = new sql.Request() 

    var q2 = "exec storedproc"; 

    request2.query(q2, (err2, result2) => { 
     if (err2) return callback(err2); 
     if (err2) { 
      console.log(err2); 
     }   
    }); 
}); 
}); 

Multer의 설정은 다음과 같습니다

Storage = multer.diskStorage({ 
    destination: function(req, file, callback) { 
     callback(null, "./Images"); 
    }, 
    filename: function(req, file, callback) { 
     storedFile = file.fieldname + "_" + Date.now() + "_" + file.originalname + randomInteger(99999) + ".jpg" 
     callback(null, storedFile); 
    } 
}); 

답변

0

Multer요청 개체에 대한 정보를 파일에 추가합니다.

req.file 

은 업로드 된 이미지를 검색 에서 경로 :

req.file.path 

귀하의 세계적으로 저장된 변수 storedFile 당신 트립 무슨이다. 이미지 경로 문자열을 사용하도록 코드를 업데이트하십시오.

mv(req.file.path , idPatient + ".jpg", function(err) { 
+0

고마워요! 매력처럼 작동합니다! – minicooper