首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Expressjs中本地运行文件上载时保存到OSX上的tmp文件夹中的文件

在Expressjs中本地运行文件上载时保存到OSX上的tmp文件夹中的文件
EN

Stack Overflow用户
提问于 2018-01-22 17:57:04
回答 1查看 667关注 0票数 1

我有一个角形5应用程序运行一个文件上传实现了ngx-上传器和一个express.js后端。上传程序运行,但它不是将文件放在我指定的目录中,而是放在我的启动驱动器根目录的tmp文件夹中。ExpressJS后端是从OS主目录中的一个子文件夹运行的(Sierra10.12.6)。

ExpressJS代码:

代码语言:javascript
复制
var path = require('path');
var express = require('express');
var cors = require("cors");
var multer = require('multer');

var app = express();

app.use(cors({
  credentials: true,
  origin: 'http://localhost:4200'
}));

app.get('/upload', function(req, res) {
  res.send('<html><head></head><body>\
               <form method="POST" enctype="multipart/form-data">\
                <input type="text" name="textfield"><br />\
                <input type="file" name="filefield"><br />\
                <input type="submit">\
              </form>\
            </body></html>');
  res.end();
});

const upload = multer({
  dest: 'uploads/',
  storage: multer.diskStorage({
    filename: (req, file, cb) => {
      let ext = path.extname(file.originalname);
      cb(null, `${Math.random().toString(36).substring(7)}${ext}`);
    }
  })
});

app.post('/upload', upload.any(), (req, res) => {
  console.log(res.json, upload.any());
  res.json(req.files.map(file => {
    console.log(file);
    let ext = path.extname(file.originalname);
    return {
      originalName: file.originalname,
      filename: file.filename
    }
  }));
});

app.listen(3000, () => {
  console.log('ngx-uploader server running on port 3000.');
});

我假设这是由于OS或Unix的一些默认行为造成的。要在我指定的目录中获取这个存储文件,我需要做什么?我猜它与在我的主目录中运行应用程序有关。那么,像这样运行代码的合适位置在哪里呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-22 18:54:53

您需要做的就是按照以下方式声明您的upload

代码语言:javascript
复制
const upload = multer({
  // ommit dest field - it is useless while using storage
  storage: multer.diskStorage({

    destination: req, file, cb) => { // you are missing this one
      cb(null, '/uploads') 
    },

    filename: (req, file, cb) => {
      let ext = path.extname(file.originalname);
      cb(null, `${Math.random().toString(36).substring(7)}${ext}`);
    }

  })
});

来自docs:storagedest具有更高的优先级。

文档进一步阅读

有两个选项,destinationfilename。它们都是决定文件存储位置的函数。destination用于确定应在哪个文件夹中存储上载的文件。这也可以给出一个字符串(例如‘/tmp/上载’)。如果没有提供destination,则使用操作系统的临时文件默认目录。

这说明了您的情况:您没有提供destination,并且使用了默认的OS目录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48387563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档