簡體   English   中英

在 node.js 中移動文件時如何解決路徑問題?

[英]How to resolve path issues while moving files in node.js?

我正在嘗試從 html 表單中獲取文件並將其存儲在另一個文件夾中。 它基本上是雲 function,我對 node.js 和 firebase 都是新手,所以不知道我在做什么錯。 我設法做的是:

const fileMiddleware = require('express-multipart-file-parser');

app.post("/sendMail", (req, res) => {
const {
    fieldname,
    filename,
    encoding,
    mimetype,
    buffer,
  } = req.files[0];
  console.log(req.files[0].originalname);
  var fs = require('fs')

  var oldPath = req.files[0].originalname;
  var newPath = '/functions/'+oldPath;

  fs.rename(oldPath, newPath, function (err) {
      if (err) throw err
      console.log('Successfully renamed - AKA moved!')
  });
});

每當我嘗試移動文件時,都會遇到路徑問題。 錯誤如下:

[Error: ENOENT: no such file or directory, rename 'C:\Users\Maisum Abbas\now\functions\sendMail.txt' 
> 'C:\functions\sendMail.txt'] {    
>    errno: -4058,
>    code: 'ENOENT',
>    syscall: 'rename',
>    path: 'C:\\Users\\Maisum Abbas\\now\\functions\\sendMail.txt',
>    dest: 'C:\\functions\\sendMail.txt'
>  }

此外,這是我想要實際移動文件的路徑,但 oldpath 已經像這樣設置了。

C:\Users\Maisum Abbas\now\functions\sendMail.txt 

由於我需要使用 email 附加文件,因此會導致路徑問題。 我用 multer 試了一下,效果很好。 我做了什么:

//call libraries here

var storage =   multer.diskStorage({
    destination: function (req, file, callback) {
    callback(null, 'resume/');
  },
  filename: function (req, file, callback) {
    callback(null, file.fieldname + '-' + Date.now());
  }
});

var upload = multer({ storage : storage}).single('filetoupload');

app.post("/careerMail", (req, res) => {
  const { name } = req.body;
  const { email } = req.body;
  const { phone } = req.body;
  upload(req,res,function(err) {
    if(err) {
        return res.end("Error uploading file.");
    }
  });

const dest = 'mymail';

const mailOptions = {
    from: email, // Something like: Jane Doe <janedoe@gmail.com>
    to: dest,
    subject: 'Candidate Application', // email subject
    html: `<div>             
    <strong>From:</strong> ` +
          name +
          `<br /><br />              
    <strong>Email:</strong> ` +
          email +
          `<br /><br />              
    <strong>Phone:</strong> ` +
          phone +
          `<br /><br />           
    </div>           
    `,// email content in HTML
    attachments: [
      {
          filename: req.files[0].originalname,
          content: req.files[0].buffer.toString("base64"),
          encoding: "base64"
      }
    ]

and rest of the code...

我建議完全重新考慮這種方法。 您將無法在已部署的 function 中移動文件。 nodejs 運行時文件系統不允許將任何文件寫入文件系統中的任何位置,除了os.tmpdir() (在 Linux 上是 /tmp )。

如果你需要臨時寫一個文件,你絕對應該只使用那個 tmp 空間。 請注意,在那里寫入的文件占用 memory 並且應該在 function 終止之前刪除,否則您可能會泄漏 memory。

您可以讀取使用代碼部署的文件,但您應該通過相對路徑來執行此操作。

我在移動文件時遇到了同樣的問題。 我通過使用 function 來獲取應用程序根文件夾,然后連接該位置的 rest 來解決這個問題。

//place this file on application root.
//import where you need to get the root path.

const path = require('path');
module.exports = (function(){
    return path.dirname(require.main.filename || process.mainModule.filename);
})();

//taking your case move location.

const rootPath = //require the above module.

const newPath = rootPath + /functions/' +oldPath;

 fs.rename(oldPath, newPath, function (err) {
      if (err) throw err
      console.log('Successfully renamed - AKA moved!')
  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM