nginx服务器实现上传文件功能_利用nginx-upload-module模块

[复制链接]
发表于 2025-10-19 15:28:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
目次



  • conf文件内容如下
  • html文件内容如下
  • 上传文件功能展示
conf文件内容如下

  1. #user  nobody;
  2. worker_processes  1;
  3. error_log  /usr/logs/error.log;
  4. #error_log  /usr/logs/error.log  notice;
  5. #error_log  /usr/logs/error.log  info;
  6. #pid        /usr/logs/nginx.pid;
  7. events {
  8.     worker_connections  1024;
  9. }
  10. http {
  11.     include       mime.types;
  12.     default_type  application/octet-stream;
  13.     sendfile        on;
  14.     keepalive_timeout  65;
  15.    
  16.     server {
  17.         listen       80;
  18.         server_name  localhost;
  19.         client_max_body_size 100m;
  20.         location / {
  21.             root /root/nginxShare;
  22.             index uploadfile.html uploadfile.htm;  # 这会使得在访问根目录时默认展示 uploadfile.html
  23.         }
  24.         
  25.         error_page 405 =200 @405;
  26.         
  27.          # 配置上传位置
  28.         location /upload {
  29.         if ($request_method = 'GET'){
  30.             root /root/nginxShare;
  31.         }
  32.         if ($request_method = 'POST'){
  33.                
  34.             upload_pass @test;  # 指定上传完成后请求的处理位置
  35.                
  36.             # upload_store /root/nginxShare/upload 1;  # 数字1表示启用了一种特殊的文件存储机制,即分散存储
  37.             upload_store /root/nginxShare/upload;
  38.             
  39.             upload_store_access user:rw; #上传文件的权限,rw表示读写 r只读
  40.             
  41.             #这里写入http报头,pass到后台页面后能获取这里set的报头字段
  42.             upload_set_form_field "${upload_field_name}_name" $upload_file_name;
  43.             upload_set_form_field "${upload_field_name}_content_type" $upload_content_type;
  44.             upload_set_form_field "${upload_field_name}_path" $upload_tmp_path;
  45.             
  46.             #Upload模块自动生成的一些信息,如文件大小与文件md5值
  47.             upload_aggregate_form_field "${upload_field_name}_md5" $upload_file_md5;
  48.             upload_aggregate_form_field "${upload_field_name}_size" $upload_file_size;
  49.                     
  50.             upload_pass_form_field "^submit$|^description$";
  51.             
  52.             upload_cleanup 400 404 499 500-505; #如果pass页面是以下状态码,就删除此次上传的临时文件      
  53.   
  54.         }      
  55.         }
  56.         # 处理上传完成后的请求
  57.         location @test {
  58.             # 这里可以配置代理到后端服务,或者直接返回响应
  59.             # 例如,返回一个简单的文本响应
  60.             return 200 'File uploaded successfully!20241104';
  61.             # 或者代理到某个后端服务处理上传后的逻辑
  62.             # proxy_pass http://localhost:7123;;
  63.         }      
  64.     }
  65.    
  66.     server {
  67.                 listen       9000;
  68.                 server_name  localhost;
  69.                
  70.                 client_max_body_size 100m;
  71.                 charset      gbk,utf-8;
  72.                 root /root/nginxShare;
  73.                 location / {
  74.                      auth_basic   "Restricted";  
  75.          autoindex on;
  76.          autoindex_exact_size on;
  77.          autoindex_localtime on;
  78.           
  79.                 }
  80.         }        
  81. }
复制代码
html文件在/root/nginxShare目次下。
上传的文件存放在/root/nginxShare/upload目次下。
上传乐成会返回一个文本相应,文本内容为:File uploaded successfully!20241104

html文件内容如下

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>文件上传测试</title>
  6. </head>
  7. <body>
  8.     <h2>文件上传</h2>
  9.     <form action="/upload" method="post" enctype="multipart/form-data">
  10.         <input type="file" name="file" required>
  11.         <br>
  12.         <input type="submit" value="上传">
  13.     </form>
  14. </body>
  15. </html>
复制代码
上传文件功能展示

运行nginx服务器
  1. mkdir -p /var/log/nginx /var/tmp/nginx
  2. ./sbin/nginx -c /etc/nginx/nginx.conf
复制代码
在欣赏器输入:192.168.61.61::80
表现页面如下:

点击选择文件,选择本地文件,点击上传后,会弹出如下页面:

下载该文件后,检察文件内容:

可以看到,文本内容符合预期,接着我们检察/root/nginxShare/upload目次

可以看到,文件已上传乐成,不外文件的名字是从1开始的,具体怎么控制文件名还没实现。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表