node.js - 使用 multer 上传大文件 (>2GB)
问题描述
我正在尝试将一个大文件 (7GB) 上传到我的服务器。为此,我正在使用multer
:
const express = require('express');
const multer = require('multer');
const {
saveLogFile,
} = require('../controller/log');
const router = express.Router();
const upload = multer();
router.post('/', upload.single('file'), saveLogFile);
在我的控制器中,这是我想要获取saveLogFile
的格式。包应该给我上传的文件。因此,当我尝试上传小文件(<2GB)时,它会成功。但是当我尝试上传超过 2GB 的文件时,我收到以下错误:saveLogFile = async (req,res) => { ... }
req.file
multer
req.file
buffer.js:364
throw new ERR_INVALID_OPT_VALUE.RangeError('size', size);
^
RangeError [ERR_INVALID_OPT_VALUE]: The value "7229116782" is invalid for option "size"
我怎样才能绕过它?实际上,我需要的只是访问saveLogFile
控制器中上传的文件。
解决方案
原因可能是当您使用 multer 时节点将耗尽内存而不传递任何选项。从文档:
如果您省略选项对象,文件将保存在内存中并且永远不会写入磁盘。
尝试使用dest
orstorage
选项以使用临时文件进行上传:
const upload = multer({ dest: './some-upload-folder' });
router.post('/', upload.single('file'), saveLogFile);
推荐阅读
- c# - 如何从 TextBox 更改按钮的文本
- javascript - 如何访问 ajax.data 对象进行服务器端处理(jquery DataTables)?
- c# - 如何在 UWP C# 中永久检查串行设备是否连接/断开连接?
- c# - 上传文件时如何处理服务器端的验证错误
- mysql - DB 模式设计:如何为 1:N 关系列添加“全选”功能?
- c - 如果我不小心在 ARM 上运行 x86 二进制文件,如何显示错误消息?
- python - Redshift 未通过 Python 脚本连接到主机
- c++ - 从正交投影切换到透视投影
- ruby - Haml,ruby on rails 错误:渲染模板时遇到语法错误
- django - Django Admin - 选择禁用字段