上传文件到Nginx

问题描述 投票:0回答:3

有没有办法使用nginx通过http将文件上传到服务器?

我有一个程序,基本上使用curl和通过http的POST方法将文件发送到完全不同的企业软件。我们想要复制类似的东西,但遇到了障碍。

我已经安装了nginx并做了基本配置,我希望能够上传/data/files/incoming下的文件

server {
    listen testserv1;

    location /upload/ {
      limit_except POST PUT { deny all; }
      client_body_temp_path /data/files/incoming/;
      client_body_in_file_only on;
      client_body_buffer_size 128k;
      client_max_body_size 100M;
      proxy_pass_request_headers on;
      proxy_set_body $request_body_file;
      proxy_pass http://127.0.0.1/upload;
      proxy_redirect off;
    }

我基本上保留了 nginx.conf 上的常规配置并添加了上面的内容。所以我的问题是,我怎么知道它实际上有效?我确实从另一台服务器尝试运行该程序,该程序据称会发布文件,但什么也没有。还有一种方法可以从另一个系统测试此配置吗?我在配置中遗漏了什么吗?

任何帮助,任何事情都非常感激。

post nginx http-post
3个回答
13
投票

您可以通过在 URL 中指定文件名来完成此操作,而无需使用任何外部模块。我在没有代理的情况下进行了测试,但它应该能够工作:

server {
    listen testserv1;

    location ~ "/upload/([0-9a-zA-Z-.]*)$" {
        dav_methods  PUT DELETE MKCOL COPY MOVE;
        client_body_temp_path /tmp/incoming;
        alias     /data/files/incoming/$1;
        create_full_put_path   on;
        dav_access             group:rw  all:r;

        client_body_in_file_only on;
        client_body_buffer_size 128k;
        client_max_body_size 100M;
        proxy_pass_request_headers on;
        proxy_set_body $request_body_file;
        proxy_pass http://127.0.0.1/upload;
        proxy_redirect off;
    }
}

并使用:curl -T test.zip http://testserv1/upload/text.zip


2
投票

0
投票

Nginx 文件服务器

环境

  • Ubuntu 22.04.4 LTS aarch64

安装nginx

sudo apt install nginx

如何使用

# create directory
sudo mkdir /nginx_files
sudo chmod 777 /nginx_files
sudo touch /nginx_files/{0..5}.txt

# add config
sudo tee /etc/nginx/sites-enabled/file_server.conf <<-'EOF'
server {
    listen      8081;
    server_name localhost;

    charset utf-8;

    location / {
        alias     /nginx_files/;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        try_files $uri $uri/ =404;
    }

    location ~ "/api/([\s\S]*)$" {
        dav_methods  PUT DELETE MKCOL COPY MOVE;
        client_body_temp_path  /tmp/upload_tmp;
        alias     /nginx_files/$1;
        create_full_put_path   on;
        dav_access             group:rw  all:r;

        client_max_body_size 1000M;
    }
}
EOF

# reload nginx config
sudo systemctl reload nginx

浏览器打开http://localhost:8081

上传文件

# upload file
curl -T test.txt http://localhost:8081/api/test.txt

# delete file
curl -X DELETE http://localhost:8081/api/test.txt

# download file ('-#' is a progress)
curl -O -# http://localhost:8081/api/test.txt

参考

© www.soinside.com 2019 - 2024. All rights reserved.