基于uWebsockets开源库实现http文件上传功能

📅 发布时间:2026/7/9 13:22:08 👁️ 浏览次数:
基于uWebsockets开源库实现http文件上传功能
一 实现一个http服务使用uWebsockets库实现一个http服务请参考下面链接:https://blog.csdn.net/kk821521286/article/details/154841882https://blog.csdn.net/kk821521286/article/details/154841882二 配置nginx反向代理下载nginx源码# 下载源码包 wget https://nginx.org/download/nginx-1.26.2.tar.gz# 解压源码包 tar -zxvf nginx-1.26.2.tar.gz# 进入源码目录 cd nginx-1.26.2配置编译参数./configure \ --prefix=/usr/local/nginx \ # Nginx 安装目录--with-http_ssl_module \ # 开启 SSL 模块(核心)--with-http_v2_module \ # 可选:开启 HTTP/2 (依赖 SSL)--with-pcre \ # 启用 PCRE 正则表达式--with-zlib # 启用 zlib 压缩编译并安装# 编译(-j 后接CPU核心数,加快编译速度,如 -j4)make -j$(nproc)# 安装make install验证SSL模块是否生效# 进入 Nginx 安装目录的 sbin 目录cd /usr/local/nginx/sbin# 查看 Nginx 编译模块./nginx -V如下图,nginx已支持sslnginx.conf配置文件添加反向代理配置# HTTPS server # server { listen 10010 ssl; server_name localhost; ssl_certificate misc/cert.pem; ssl_certificate_key misc/key.pem; ssl_protocols TLSv1.2 TLSv1.3; # 文件上传大小限制(关键配置) client_max_body_size 100M; # 允许100MB文件 client_body_buffer_size 128k; # 缓冲区大小 client_body_timeout 60; # 超时时间(秒) # 关键配置:确保使用HTTP/1.1 proxy_http_version 1.1; proxy_set_header Connection ""; location / { root html; index index.html index.htm; } location /perimeter/upload { proxy_pass http://127.0.0.1:10011; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_buffering off; #禁用缓冲,适合文件上传 chunked_transfer_encoding off; # 禁用分块传输 } }三 关键代码实现main.cpp#include QCoreApplication #include "src/App.h" #include openssl/ssl.h #include openssl/err.h /* Helpers for this example */ #include "helpers/AsyncFileReader.h" #include "helpers/AsyncFileStreamer.h" #include "helpers/Middleware.h" #define OPTPARSE_IMPLEMENTATION #include "helpers/optparse.h" #include "httphandle.h" int main(int argc, char *argv[]) { int port = 10011; uWS::SocketContextOptions ssl_options = { #if 1 .key_file_name = "misc/key.pem", .cert_file_name = "misc/cert.pem", .passphrase = "1234", // 证书密码(如有) .dh_params_file_name = nullptr, // DH参数文件(可选) .ca_file_name = nullptr, // CA证书文件(设为nullptr禁用客户端证书验证) .ssl_prefer_low_memory_usage = 0 //