【问题标题】:How to refer to a folder within the "public" static folder from an router file?如何从路由器文件中引用“公共”静态文件夹中的文件夹?
【发布时间】:2016-03-08 19:18:37
【问题描述】:

我正在尝试从路由器引用我的public 文件夹中名为tracks_folder 的文件夹。

我的项目的简化结构如下

app.js
routes/ 
      tracks/
            router.js
public/
      tracks_folder/

基本上我想从router.js 引用tracks_folder,以便将文件上传到该文件夹​​,但我无法做到这一点。

我试过了:

  1. ../../public/tracks_folder/
  2. ../../tracks_folder/
  3. ./tracks_folder/

但它们都不起作用。在我的app.js 我有

app.use(express.static(path.join(__dirname, 'public')));

但例如对于第三种情况,我收到以下错误:

Error: ENOENT: no such file or directory, open 'tracks_folder/aaa.mp3'

发生错误(本机)

理论上我应该至少可以使用第一种方法来引用tracks_folder 文件夹,但它确实有效。

我正在使用 multer 上传文件及其磁盘存储来存储它们...

以下是router.js内的简化问题相关代码:

...
var multer = require('multer')
var uploadFolder = "./tracks_folder/";

function formatTrackName(originalName) {
  return originalName.replace(/\s+/g, '-').toLowerCase();
}

var trackStorage = multer.diskStorage({
  // used to determine within which folder the uploaded files should be stored.
  destination: function(req, file, callback) {

    callback(null, uploadFolder);
  },

  filename: function(req, res, callback) {
    // req.body.name should contain the name of track
    callback(null, formatTrackName(req.body.name) + ".mp3");
  }
});


var upload = multer({
  storage: trackStorage
})

...
...

这是我未实现的 post 方法:

router.post('/upload', upload.single("track"), function(req, res) {

});

【问题讨论】:

  • 您可能应该在尝试写入文件的位置包含代码。
  • @mscdex 我用请求的详细信息编辑了我的问题。顺便说一句,这个磁盘存储机制真的处理了存储文件的整个过程,还是只是临时存储文件(然后我应该使用例如fs的函数来处理文件的写入)?老实说,从文档中根本不清楚......

标签: node.js express path public multer


【解决方案1】:

试试 ./public/tracks_folder
它对我有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 2016-01-24
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    相关资源
    最近更新 更多