魔改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

相关文章

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

在SSH的基础上使用jquery.uploadify.js上传文件

在SSH框架的基础上,使用jquery.uploadify.js实现文件的上传,之前搞了好几天,都上传不了, 在Action那边File接收到的总是为null, 为了这个还上网搜了好多相关的信息,但都不行,最后还是搜到一篇文章帮助到我了,希望能帮助到为之困扰的人。 jsp页面的关键代码: <link rel="stylesheet" type="text/css" href="${page

(function() {})();只执行一次

测试例子: var xx = (function() {     (function() { alert(9) })(); alert(10)     return "yyyy";  })(); 调用: alert(xx); 在调用的时候,你会发现只弹出"yyyy"信息,并不见弹出"10"的信息!这也就是说,这个匿名函数只在立即调用的时候执行一次,这时它已经赋予了给xx变量,也就是只是

sqlite不支持中文排序,采用java排序

方式一 不支持含有重复字段进行排序 /*** sqlite不支持中文排序,改用java排序* 根据指定的对象属性字段,排序对象集合,顺序* @param list* @param field* @return*/public static List sortListByField(List<?> list,String field){List temp = new ArrayList(

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬

Science Robotics 首尔国立大学研究团队推出BBEX外骨骼,实现多维力量支持!

重复性举起物体可能会对脊柱和背部肌肉造成损伤,由此引发的腰椎损伤是工业环境等工作场所中一个普遍且令人关注的问题。为了减轻这类伤害,有研究人员已经研发出在举起任务中为工人提供辅助的背部支撑装置。然而,现有的这类装置通常无法在非对称性的举重过程中提供多维度的力量支持。此外,针对整个人体脊柱的设备安全性验证也一直是一个缺失的环节。 据探索前沿科技边界,传递前沿科技成果的X-robot投稿,来自首尔国立

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位 一、背景二、定位问题三、解决方法 一、背景 flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案在博主上面这篇文章的基础上,在机器内存、cpu资源、flume agent资源都足够的情况下,flume agent又出现了tmp文件无法关闭的情况 二、

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

Vue3上传图片报错:Current request is not a multipart request

当你看到错误 "Current request is not a multipart request" 时,这通常意味着你的服务器或后端代码期望接收一个 multipart/form-data 类型的请求,但实际上并没有收到这样的请求。在使用 <el-upload> 组件时,如果你已经设置了 http-request 属性来自定义上传行为,并且遇到了这个错误,可能是因为你在发送请求时没有正确地设置