所有分类
  • 所有分类
  • 后端开发
解决 node.js 开发中处理大文件上传遇到的 http 413 请求实体过大错误

解决 node.js 开发中处理大文件上传遇到的 http 413 请求实体过大错误

开发web应用程序时,你可能会遇到处理大文件上传的情况。一种解决方案是通过修改默认请求体大小限制来提高上传文件大小的限制。当上传文件较大时,将整个请求体读取到内存中可能会导致性能问题。可以分批次地将数据读取到内存中。你可以根据你的应用程序需

是不是觉得用Node.js上传大文件特别困难呀?别担心,要是文件超过100KB,HTTP 413错误可是会捣蛋出来的。但是别慌,以下就是几个简单实用的小妙招可以帮到你!快来看看具体应该怎么办~

1. 修改请求体限制

想要加速上传文件?赶紧试试!在后台设置里把那个叫“请求体”什么东东的最大值调高点就好了。要是你用的是Node.js,那就更方便,直接用body-parser模组,把”limit”参数放大点儿,轻松搞定50MB甚至更大的文件上传。不过也要注意别传得太过分,不然电脑都可能卡住咯~

比如说,是不是试过这么做?改改代码顺序就行了。放到 Node.js 里面,就能随心所欲地控制数据包啦~

javascript
“Body-Parser”安装超级简单!那个库就能搞定。
App里面那个叫"bodyParser.json"的小功能挺厉害的, 能让你设置下只能接收50MB以下的JSON文件~
记得在这行代码后加个:app.use(bodyParser.urlencoded({limit:'50mb', extended: true})).

这个小程序能上载50MB的文件,当然挺方便,可遇上大片的文件就是个麻烦事了。想想,文件大的话,占的内存自然就多!

2. 使用Streams处理请求体

要发超大文件?试试Node.js的Stream API!这个神器可以自动帮你搞定各种请求,把文件内容直塞内存里,省时省力。更神奇的是,还能帮忙节约服务器内存哟~简直就是用最小成本换取最大价值的典范呀~无论再多文件也能轻松应对~

你知道吗?想传文件直接找 BusBoy就行了!这货就是个厉害的API,能把上传文件搞得妥妥的。比如下面这个简单的示例:

我们需要引入一个叫作Busboy的库。就是这样!

咱们这儿的App.post(‘/upload’),就是说当有人上传东西的时候,系统会调用这个函数来处理这些请求。到时候,它会接受两个东西作为参数: req和res。

我们拿到请求头,然后用Busboy创建了新的对象。

文件损坏不用急,来,跟我学怎么处理:先,要记住那些字段名啊、文件内情啊、文件名字啊以及编码方式啥的;然后,扫一眼收到的MIME类型,搞清它是咋回事儿,这个就是文件的格式!不懂就多看几遍前面那两步哈。

// 处理文件流

file.on(‘data’, (data) => {

const express = require('express')
const bodyParser = require('body-parser')
const app = express()
// limit设置为50MB
app.use(bodyParser.json({limit: '50mb'}))
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}))
// 处理文件上传的请求
app.post('/upload', (req, res) => {
  // ...
})
app.listen(3000, () => {
  console.log('服务器启动成功')
})

// 处理文件数据

});

file.on(‘end’, () => {

// 文件上传完成

});

busboy.on(‘finish’, () => {

给你搞个 HTTP Code 200 的 JSON 信息呗,顺便加个”文件传好啦”的message字段。

req.pipe(busboy);

});

这个代码真给力帮咱们快速地把文件传上服务器,就像玩游戏过关一样简单。用了个“流”的神奇功能,无论多大的文件都无压力,还能防止服务器因为内存不够慢下来!

3. 使用Nginx

不用担心大文件传不上Node.js~只需加个Nginx服务器就能轻松变身反向代理~即使文件太大影响请求体也是小菜一碟,因为 NGinx能直接拒接,还会发出HTTP 413错误提示滴~

想要修改Nginx设置?直接在那儿叫作/etc/nginx/nginx.conf的文件里敲上新的内容就成了~

“`nginx

http {

client_max_body_size 1000M;

}

用这招儿,就能把你想上传的东东压在1000MB以下,非常给力。再搭上Nginx,大文件上传也不怕了,还有助于分摊Node.js的压力

const express = require('express')
const app = express()
const BUSBOY = require('busboy')
app.post('/upload', (req, res) => {
  const busboy = new BUSBOY({ headers: req.headers })
  busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
    console.log('文件名:', filename);
    file.on('data', function(data) {
      console.log('文件大小为:', data.length);
    });
    file.on('end', function() {
      console.log('文件上传成功');
    })
  })
  busboy.on('field', function(fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) {
    console.log('表单字段:', fieldname, val);
  })
  busboy.on('error', function(err) {
    console.log('文件上传失败:', err);
    res.status(500).send('文件上传失败')
  })
  req.pipe(busboy)
})

4. 处理大文件上传的最佳实践

你如何拷贝大文件总是失败?别着急,我这里有两个小妙招教你轻松搞定它!首先看看你的服务器内存是否足够,如果不够的话,可以尝试使用流传输模式,这样能够节省更多内存。最后,还有个重要的方法就是设置Nginx为反向代理,这样就无需担心请求大小的问题。

想跟大家分享个大文件怎么办?只要用上body-parser和busboy这对黄金搭档就能轻松做到!body-parser会聪明的解读下请求内容,然后交由busboy来搞定文件上传,再加上我们强大的Nginx服务器,所有压力都能轻松应对。

5. 处理大文件上传的性能优化

在处理大文件上传时,性能优化也是一个重要的问题。

例如,你可以使用以下代码来优化大文件上传的性能:

文件已经存好了~目的地就是’redio/user_name/shop/folder1/folder2’,要是找不到了随时问我

把文件流递给另一个功能,存到指定地址。

哈喽!有个叫做busboy的小伙伴和我们的软件搞上了伙,帮助你轻松地上传搞定文档,并且妥妥地存在服务器的相应文件夹里。这样一来,传输大型文件就变得轻松多~

6. 处理大文件上传的安全性

在处理大文件上传时,安全性也是一个重要的问题。

例如,你可以使用以下代码来提高大文件上传的安全性:

哦对,用流和文件系统的API上传大文件,上传更安全

7. 处理大文件上传的可靠性

在处理大文件上传时,可靠性也是一个重要的问题。

例如,你可以使用以下代码来提高大文件上传的可靠性:

用了流跟文件系统的 API 上传大文件,传得更快更稳妥。

http {
  client_max_body_size 1000M;
  upstream app_servers {
    server localhost:3000;
  }
  server {
    listen 80;
    server_name yourdomain.com;
    location / {
      proxy_pass http://app_servers;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;
      proxy_set_header X-NginX-Proxy true;
    }
  }
}

8. 处理大文件上传的可扩展性

在处理大文件上传时,可扩展性也是一个重要的问题。

例如,你可以使用以下代码来提高大文件上传的可扩展性:

用好流跟文件系统这俩API,能让你的大文件上传速度快不少!

9. 处理大文件上传的可维护性

在处理大文件上传时,可维护性也是一个重要的问题。

例如,你可以使用以下代码来提高大文件上传的可维护性:

用上流跟文件系统后,解决超大文件问题简单好多!而且也让管理变得容易起来!

10. 处理大文件上传的可测试性

在处理大文件上传时,可测试性也是一个重要的问题。

例如,你可以使用以下代码来提高大文件上传的可测试性:

学着用下流API和文件系统API,就能搞定文件大容量上传了。这样子,你们程序的测试就会变得更好!

总结

搞定大文件上传HTTP413问题,就这么几招:把request body size调小点,简单易操作;试试看Nginx是不是管用;最后,哪个方法对你的APP来说最好使,得看实际情况。评论区留下你的经验分享,我们一起探讨如何更惬意地享受大文件传输带来的便利~

原文链接:https://www.icz.com/technicalinformation/web/javascript/2024/07/19085.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?