鱼C论坛

 找回密码
 立即注册
查看: 1461|回复: 5

[已解决]nodejs如何接收大文件base64编码的图片呀

[复制链接]
发表于 2022-8-13 11:29:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题:前端需要上传500kb的base64编码,但是后端一直接收不到

报错:{message: 'request entity too large', expected: 319457, length: 319457, limit: 102400, type: 'entity.too.large'}
已经写了这两句,limit还是不变
  1. app.use(bodyParser.json({ limit: '50mb' }));
  2. app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
复制代码


前端的请求是

  1.                 // dataURL为500kb的图片编码
  2.                 var urlstr = "base64=" + dataURL
  3.                 $.ajax({
  4.                     type: "POST",
  5.                     url: BASE_REQ_URL + "/my/updateuserhead64",
  6.                     data: urlstr,
  7.                     dataType: "json",
  8.                     processData: false,                                      // 不知道这两句要不要加
  9.                     contentType: "application/json;",                  // 不知道这两句要不要加
  10.                     headers: {
  11.                         'Authorization': localStorage.getItem('Authorization')
  12.                     },
  13.                     error: function(data) {
  14.                         console.log('连接失败');
  15.                     },
  16.                     success: function(data, textStatus, Status) {
  17.                         console.log(data);
  18.                         if (data.status === 0) {} else {}
  19.                     }
  20.                 })
复制代码



后端是这样写的

  1. const express = require('express')
  2. const cors = require('cors')
  3. const bodyParser = require('body-parser')
  4. const app = express()
  5. app.use(cors())
  6. app.use(express.urlencoded({ extended: false }))
  7. app.use('/upload', express.static('./upload')) // 托管静态资源文件

  8. app.use(bodyParser.json({ limit: '50mb' }));
  9. app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));

  10. app.post('/my/updateuserhead64', function(req, res) {
  11.     console.log(req.body) // 这里的输入一直为{}
  12. })
复制代码


要么报错 'request entity too large',要么req.body为{},不知道怎么回事

然后在浏览器看到的请求负载是有数据的,但是后端一直看不到,呜呜呜


最佳答案
2022-8-15 10:11:26
1569044682 发表于 2022-8-13 15:29
又用原生js试了一下,服务器返回的数据是
{"expose":true,"statusCode":400,"status":400,"body":"base6 ...

你Content-Type写的是"application/json" 但是传的不是json所以不行
我推荐用的是原生fetch而不是原生xhr xhr比jq海南用

  1. fetch('https://example.com/', {
  2.   method: 'POST',
  3.   body: JSON.stringify({base64:'xxxxxxx'}),
  4.   headers:new Headers({'Content-Type': 'application/json'})
  5. })
复制代码
;

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-13 13:24:28 | 显示全部楼层

回帖奖励 +10 鱼币

本帖最后由 一点点儿 于 2022-8-13 13:28 编辑
  1. app.post('/upload', function(req, res){

  2. //接收前台POST过来的base64

  3. var imgData = req.body.imgData;

  4. //过滤data:URL

  5. var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");

  6. var dataBuffer = new Buffer(base64Data, 'base64');

  7. fs.writeFile("image.png", dataBuffer, function(err) {

  8. if(err){

  9. res.send(err);

  10. }else{

  11. res.send("保存成功!");

  12. }

  13. });

  14. });
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-13 14:25:48 | 显示全部楼层

回帖奖励 +10 鱼币

jquery发请求实属没用的知识,不如原生fetch请求
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-13 15:29:20 | 显示全部楼层
kogawananari 发表于 2022-8-13 14:25
jquery发请求实属没用的知识,不如原生fetch请求

又用原生js试了一下,服务器返回的数据是
{"expose":true,"statusCode":400,"status":400,"body":"base64=\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQAB...
上传不成功

请求是这样写的
  1. // 原生js发送ajax请求
  2. var urlstr = "base64=" + dataURL
  3.                 var url = BASE_REQ_URL + "/my/updateuserhead64"
  4.                 var data = urlstr
  5.                 var isAsync = true; // t:异步 f:同步
  6.                 var callback = function(res) {
  7.                     console.log(res);
  8.                 }

  9.                 sendbase64(url, data, isAsync, callback)

  10.                 function sendbase64(url, data, isAsync, callback) {
  11.                     var xhr = new XMLHttpRequest();
  12.                     xhr.open('POST', encodeURI(url), isAsync);
  13.                     xhr.setRequestHeader("Accept", "json");
  14.                     xhr.setRequestHeader('Content-Type', "application/json; charset=utf-8");
  15.                     xhr.setRequestHeader("OData-MaxVersion", "4.0");
  16.                     xhr.setRequestHeader("OData-Version", "4.0");
  17.                     // xhr.setRequestHeader("Prefer", "odata.include-annotations=*");

  18.                     xhr.onreadystatechange = function() {
  19.                         if (xhr.readyState == 4) {
  20.                             if (xhr.status == 200 || xhr.status == 304) {
  21.                                 callback(xhr.responseText);
  22.                             }
  23.                         }
  24.                     }
  25.                     xhr.send(data);
  26.                 }
复制代码


dataURL是"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA..............
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-13 17:48:59 | 显示全部楼层

回帖奖励 +10 鱼币

学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-15 10:11:26 | 显示全部楼层    本楼为最佳答案   
1569044682 发表于 2022-8-13 15:29
又用原生js试了一下,服务器返回的数据是
{"expose":true,"statusCode":400,"status":400,"body":"base6 ...

你Content-Type写的是"application/json" 但是传的不是json所以不行
我推荐用的是原生fetch而不是原生xhr xhr比jq海南用

  1. fetch('https://example.com/', {
  2.   method: 'POST',
  3.   body: JSON.stringify({base64:'xxxxxxx'}),
  4.   headers:new Headers({'Content-Type': 'application/json'})
  5. })
复制代码
;

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 06:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表