通过纯Nginx实现一个简单的文件上传功能

需求想要上传文件到服务器,内部使用访问也不多,但是上传接口没有,又不想额外配置一个文件服务器,通过查阅资料发现Nginx自带文件上传功能。

1. 检查当前nginx是否包含 dav 模块

bash 复制代码
nginx -V 2>&1 | findstr "dav"

输入该命令,检查,如果有的话,就可以使用了。

2. 配置上传接口

bash 复制代码
    location /eventFileUpload {
        # 设置上传文件大小限制为 100M
        client_max_body_size 100M;
    
        # 指定文件保存路径(注意使用正斜杠:我用的是windows服务器)
        alias E:/xxx/xxx/xxx;
    
        # 开启目录浏览,方便查看已上传的文件
        autoindex on;
    
        # 启用 WebDAV 功能
        dav_methods PUT DELETE MKCOL COPY MOVE;
    
        # 允许创建多级目录
        create_full_put_path on; 
     }

3. 调用上传

java 复制代码
 public static void main(String[] args) {
        try {
            // File path to upload
            String filePath = "D:\\1.txt";
            File file = new File(filePath);
            
            if (!file.exists()) {
                System.out.println("File does not exist: " + filePath);
                return;
            }
            
            // Upload URL 注意这里哦,eventFileUpload 为nginx 配置的访问url。后面为文件地址,要放进来的服务器的文件地址,要加到这里,因为body只传了文件流,没有指定上传到哪个路径,需要在这里指定哦
            String uploadUrl = "http://xxx/xxx/xxx/eventFileUpload/222/1.txt";
            
            // Create OkHttp client
            OkHttpClient client = new OkHttpClient();
            
            // Create request body with file content
            okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(
                file, 
                MediaType.parse("application/octet-stream")
            );
            
            // Build PUT request
            Request request = new Request.Builder()
                .url(uploadUrl)
                .put(requestBody)
                .build();
            
            // Execute request
            System.out.println("Uploading file: " + filePath);
            System.out.println("To URL: " + uploadUrl);
            
            try (Response response = client.newCall(request).execute()) {
                if (response.isSuccessful()) {
                    System.out.println("Upload successful!");
                    System.out.println("Response code: " + response.code());
                    if (response.body() != null) {
                        System.out.println("Response body: " + response.body().string());
                    }
                } else {
                    System.out.println("Upload failed!");
                    System.out.println("Response code: " + response.code());
                    System.out.println("Response message: " + response.message());
                    if (response.body() != null) {
                        System.out.println("Response body: " + response.body().string());
                    }
                }
            }
        } catch (Exception e) {
            System.err.println("Error during file upload: " + e.getMessage());
            e.printStackTrace();
        }
    }
相关推荐
夏日听雨眠6 小时前
LInux(逻辑地址与物理地址的区别,文件描述符,lseek函数)
linux·运维·网络
哲霖软件7 小时前
ERP 赋能非标自动化行业:破解物料与库存管理难题
运维·自动化
火车叼位8 小时前
替代 Tiny Win10 的 Linux 方案:Debian XFCE 精简桌面搭建
linux·运维
syagain_zsx10 小时前
Linux指令初识(实用篇)
linux·运维·服务器
OYangxf10 小时前
Git Commit Message
运维·git
Alter123010 小时前
从“力大砖飞”到“拟态共生”,新华三定义AI基础设施的系统级进化
大数据·运维·人工智能
王木风10 小时前
终端里的编程副驾:DeepSeek-TUI-项目深度拆解,实测与原理分析
linux·运维·人工智能·rust·node.js
槑槑紫10 小时前
windows系统装轻量版linux开发
linux·运维·服务器
齐潇宇11 小时前
k8s-Helm管理器
linux·运维·云原生·容器·kubernetes
小王C语言12 小时前
Windows和Linux之间文件互传
linux·运维·服务器