本文主要是介绍魔改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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!