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

相关文章

GitLab文件的上传与下载方式

《GitLab文件的上传与下载方式》:本文主要介绍GitLab文件的上传与下载方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录GitLab 项目拉取到本地GitLab 项目上传方法方法 1:本地项目未初始化Git方法 2:本地项目已初始化GitGitLab 上

Nginx 413修改上传文件大小限制的方法详解

《Nginx413修改上传文件大小限制的方法详解》在使用Nginx作为Web服务器时,有时会遇到客户端尝试上传大文件时返回​​413RequestEntityTooLarge​​... 目录1. 理解 ​​413 Request Entity Too Large​​ 错误2. 修改 Nginx 配置2.1

Java应用如何防止恶意文件上传

《Java应用如何防止恶意文件上传》恶意文件上传可能导致服务器被入侵,数据泄露甚至服务瘫痪,因此我们必须采取全面且有效的防范措施来保护Java应用的安全,下面我们就来看看具体的实现方法吧... 目录恶意文件上传的潜在风险常见的恶意文件上传手段防范恶意文件上传的关键策略严格验证文件类型检查文件内容控制文件存储

Java实现MinIO文件上传的加解密操作

《Java实现MinIO文件上传的加解密操作》在云存储场景中,数据安全是核心需求之一,MinIO作为高性能对象存储服务,支持通过客户端加密(CSE)在数据上传前完成加密,下面我们来看看如何通过Java... 目录一、背景与需求二、技术选型与原理1. 加密方案对比2. 核心算法选择三、完整代码实现1. 加密上

在React聊天应用中实现图片上传功能

《在React聊天应用中实现图片上传功能》在现代聊天应用中,除了文字和表情,图片分享也是一个重要的功能,本文将详细介绍如何在基于React的聊天应用中实现图片上传和预览功能,感兴趣的小伙伴跟着小编一起... 目录技术栈实现步骤1. 消息组件改造2. 图片预览组件3. 聊天输入组件改造功能特点使用说明注意事项

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现