魔改Mongoose源文件,支持一次上传文件大于3M

2024-03-01 12:18

本文主要是介绍魔改Mongoose源文件,支持一次上传文件大于3M,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

修改read_conn文件

static long read_conn(struct mg_connection *c) {long n = -1;// if (c->recv.len >= MG_MAX_RECV_BUF_SIZE) {//   mg_error(c, "max_recv_buf_size reached");// } else if (c->recv.size - c->recv.len < MG_IO_SIZE &&!mg_iobuf_resize(&c->recv, c->recv.size + MG_IO_SIZE)) {mg_error(c, "oom");} else {char *buf = (char *) &c->recv.buf[c->recv.len];size_t len = c->recv.size - c->recv.len;n = c->is_tls ? mg_tls_recv(c, buf, len) : mg_sock_recv(c, buf, len);LOG(n > 0 ? LL_VERBOSE_DEBUG : LL_DEBUG,("%-3lu %d%d%d%d%d%d%d%d%d%d%d%d%d%d %7ld %ld/%ld err %d", c->id,c->is_listening, c->is_client, c->is_accepted, c->is_resolving,c->is_connecting, c->is_tls, c->is_tls_hs, c->is_udp, c->is_websocket,c->is_hexdumping, c->is_draining, c->is_closing, c->is_readable,c->is_writable, (long) c->recv.len, n, (long) len, MG_SOCK_ERRNO));if (n == 0) {// Do nothing} else if (n < 0) {c->is_closing = 1;  // Error, or normal termination} else if (n > 0) {struct mg_str evd = mg_str_n(buf, (size_t) n);if (c->is_hexdumping) {char *s = mg_hexdump(buf, (size_t) n);LOG(LL_INFO, ("\n-- %lu %s %s %ld\n%s", c->id, c->label, "<-", n, s));free(s);}c->recv.len += (size_t) n;mg_call(c, MG_EV_READ, &evd);}}return n;
}

修改mg_http_upload文件:

int mg_http_upload(struct mg_connection *c, struct mg_http_message *hm,const char *dir) {char offset[40] = "", name[200] = "", path[256];// mg_http_get_var(&hm->query, "offset", offset, sizeof(offset));// mg_http_get_var(&hm->query, "name", name, sizeof(name));struct mg_http_part part;size_t oft = 0;while((oft = mg_http_next_multipart(hm->body, oft, &part)) > 0) {strncpy(name, part.filename.ptr, strlen(part.filename.ptr) - strlen(strchr(part.filename.ptr, '\"')));if (name[0] == '\0') {mg_http_reply(c, 400, "", "%s", "name required");return -1;} else {FILE *fp;snprintf(path, sizeof(path), "%s%c%s", dir, MG_DIRSEP, name);LOG(LL_DEBUG,("%p %d bytes @ %d [%s]", c->fd, (int) part.body.len, (int) oft, name));if ((fp = fopen(path, oft == 0 ? "wb" : "ab")) == NULL) {mg_http_reply(c, 400, "", "fopen(%s): %d", name, errno);return -2;} else {fwrite(part.body.ptr, 1, part.body.len, fp);fclose(fp);mg_http_reply(c, 200, "", "");return (int) part.body.len;}}}
}

这篇关于魔改Mongoose源文件,支持一次上传文件大于3M的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/762421

相关文章

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

(超详细)YOLOV7改进-Soft-NMS(支持多种IoU变种选择)

1.在until/general.py文件最后加上下面代码 2.在general.py里面找到这代码,修改这两个地方 3.之后直接运行即可

剑指offer(C++)--数组中只出现一次的数字

题目 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 class Solution {public:void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {int len = data.size();if(len<2)return;int one = 0;for(int i

剑指offer(C++)--第一个只出现一次的字符

题目 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). class Solution {public:int FirstNotRepeatingChar(string str) {map<char, int> mp;for(int i = 0; i < str.size(); ++i)m

LeetCode —— 只出现一次的数字

只出现一次的数字 I  本题依靠异或运算符的特性,两个相同数据异或等于0,数字与0异或为本身即可解答。代码如下: class Solution {public:int singleNumber(vector<int>& nums) {int ret = 0;for (auto e : nums){ret ^= e;}return ret;}};  只出现一次的数字 II

el-upload 上传图片及回显照片和预览图片,文件流和http线上链接格式操作

<div v-for="(info, index) in zsjzqwhxqList.helicopterTourInfoList" :key="info.id" >编辑上传图片// oss返回线上地址http链接格式:<el-form-itemlabel="巡视结果照片":label-width="formLabelWidth"><el-upload:action="'http:

基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结

最近刚刚接触XILINX的ZYNQ板,刚接触没有十天。XILINX定位它为SOC,我也很认同,起码比TI定位MPU为SOC强很多。据说今年TI的最新产品也加入了ZYNQ板。 之前的MIPS处理器设计与实现的项目就算做告一段落,搞了将近7个月,成果显著,收获颇多,最近打算搞搞ZYNQ。 之前MIPS也有一套交叉编译工具,不过是老师提供的,自己也尝试搞了搞,太辛苦了,而且也没什么成果,因为我

【建设方案】基于gis地理信息的智慧巡检解决方案(源文件word)

传统的巡检采取人工记录的方式,该工作模式在生产中存在很大弊端,可能造成巡检不到位、操作失误、观察不仔细、历史问题难以追溯等现象,使得巡检数据不准确,设备故障隐患得不到及时发现和处理。因此建立一套完善的巡检管理系统是企业实现精细化管理的一项重要工作。 基于GIS地理信息系统绘制常规巡检线路,设置线路巡检频率,当线路处于激活状态时,可根据已设置的频率自动生成巡检线路任务,并以消息的形式推送给执行人,

让IE8支持@media query

方法一:polyfill Respond.js 方法二:css hack @media \0screen {} 写在@media \0screen {} 中的代码只会在IE8中执行,其他浏览器会忽略这些代码 注:推荐使用方法一

让IE8支持CSS3属性(border-radius、box-shadow、linear-gradient)

下载 PIE-1.0.0.zip解压后,将文件夹重命名为PIE,放到项目目录下在CSS3文件中添加一行代码 behavior: url(PIE/PIE.htc); 例如: .form__input{border-radius: 0.3em;behavior: url(PIE/PIE.htc);} 参考: TYStudio-专注WEB前端开发 css3pie