首页 > 其他分享 >openresty配置为简单文件上传下载服务器

openresty配置为简单文件上传下载服务器

时间:2024-11-11 11:31:37浏览次数:1  
标签:end openresty ngx 上传下载 upload file 服务器 folder local

安装resty.upload模块

opm install ledgetech/lua-resty-upload

新建/usr/local/openresty/nginx/lua/upload.lua

内容如下:

local upload = require "resty.upload"
local cjson = require "cjson.safe"

local chunk_size = 4096
local form, err = upload:new(chunk_size)

if not form then
    ngx.log(ngx.ERR, "failed to create upload: ", err)
    ngx.exit(500)
end

local file
local file_name = ""
local success = false

-- 获取 URL 参数中的子文件夹路径(支持嵌套)
local folder = ngx.var.arg_folder
if not folder or folder == "" then
    folder = ""  -- 如果未提供 folder 参数,使用默认子文件夹
end

-- 构建文件存储的完整路径
local file_path = "/home/ubuntu/share/" .. folder .. "/"

-- 递归创建嵌套目录(确保子文件夹路径存在)
local mkdir_command = "mkdir -p " .. file_path
os.execute(mkdir_command)

form:set_timeout(1000)  -- 设置超时时间

while true do
    local typ, res, err = form:read()
    if not typ then
        ngx.say(cjson.encode({success = false, msg = "failed to read: " .. err}))
        return
    end

    if typ == "header" then
        if res[1] == "Content-Disposition" then
            file_name = res[2]:match('filename="([^"]+)"')
            if file_name then
                file = io.open(file_path .. file_name, "w+")
                if not file then
                    ngx.say(cjson.encode({success = false, msg = "failed to open file"}))
                    return
                end
            end
        end

    elseif typ == "body" then
        if file then
            file:write(res)
        end

    elseif typ == "part_end" then
        if file then
            file:close()
            file = nil
            success = true
        end

    elseif typ == "eof" then
        break
    end
end

ngx.say(cjson.encode({success = success, file = file_name, path = file_path}))

修改/usr/local/openresty/nginx/conf/nginx.conf

events {}

http {
        server {
        listen 80;
        server_name localhost;

        # 文件上传接口
        location /upload {
            content_by_lua_file /usr/local/openresty/nginx/lua/upload.lua;
        }

        # 文件下载接口
        location /download/ {
            alias /home/ubuntu/share/;
            autoindex on;   # 开启目录浏览
            autoindex_exact_size off; # 使用MB, GB作为文件大小单位
            autoindex_localtime on; # 显示本机
        }
    }
}

标签:end,openresty,ngx,上传下载,upload,file,服务器,folder,local
From: https://www.cnblogs.com/lightmon5210/p/18539369

相关文章

  • Ubuntu搭建vsFTPD服务器用于FileZilla客户端远程连接
    一、vsftpd是什么?vsftpd是verysecureFTPdaemon(服务)的缩写,安全性是它的一个最大的特点。vsftpd是一个UNIX类操作系统上运行的服务器的名字,它可以运行在诸如Linux、BSD、Solaris、HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件。 二、搭建过程1.......
  • 如何在云服务器上配置ollama、部署llama3.2大语言模型
    本项目是在NVIDIAGeForceRTX4090云服务器的Ubuntu22.04系统上运行系统环境为:Python3.12、Pytorch2.4.0、CUDA12.1、cuDNN8、NVCC通过VNC远程连接到服务器,服务器的租赁是在矩池云官网上。一、服务器租赁登录到矩池云官网选择亚太一区,选择RTX4090服务器,点击租用,等......
  • 腾讯云云服务器数据迁移实战方案
    前言我在三年前购买的腾讯云服务器今年过期咯,今年的腾讯云双十一活动也是给力优惠攻略极速观看:刻不容缓腾讯云双十一活动羊毛攻略!!!-腾讯云开发者社区-腾讯云极速通道购买:腾讯云11.11上云拼团Go经过上面的攻略我购买了一个2h4g和4h8g的云服务器,我将Mysql、Redis......
  • Windows 10 配置为 NTP 时间服务器的操作步骤及解析
    之前有过将Windows10配置为NTP时间服务器的经历,但是没有做文字记录。这次又需要做一样的配置,对网上的资料和配置细节不太确定,所以设置完后写了本篇记录。操作步骤设置服务器类型为NTP;修改注册表键值HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Pa......
  • Windows和Ubuntu系统如何远程连接Linux服务器
    前言因为很多实验都要在工作站上面运行,为了避免拿着装着数据的硬盘在自己电脑和工作站之间来回跑,我简单总结一下在windows和Ubuntu系统下远程访问Linux服务器的过程吧,也方便大家参考。Windows连接Ubuntu服务器准备工作xshell软件下载地址:链接:http://pan.baidu.com/s/1......
  • 如何在 Debian 8 上设置 OpenVPN 服务器
    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。简介OpenVPN是一个开源的VPN应用程序,可以让您在公共互联网上安全地创建和加入私人网络。简而言之,这允许最终用户隐藏连接并更安全地浏览不受信任的网络。有了这个前提,......
  • 服务器意外断电导致无法重启数据恢复
    一、初步诊断与评估检查电源系统:确认服务器电源和断路器是否正常工作,检查电源线是否松动或损坏。如果有备份电源(如UPS),检查其是否也受到影响。评估硬件状态:在尝试重启之前,检查服务器的其他硬件组件(如主板、内存、硬盘等)是否有明显的物理损坏或异常。查看报错信息:如果服务器在......
  • 2024 年 10 个最佳 Linux 服务器发行版
    对于系统管理员和网络工程师来说,选择正确的Linux发行版尤为关键,因为它直接影响到服务器的性能、维护成本及长期使用的稳定性。虽然Linux系统有上百种发行版,但不同的发行版在功能、社区支持、企业级支持等方面有所不同。因此,了解并选择一个适合自己需求的Linux发行版显......
  • (Lin的实施运维笔记06)解决Tomcat服务器在控制台窗口中的乱码问题
    产生乱码的根本原因就是编码和解码不一致,比较常见的编码格式有Unicode、ASCll码、GBK、UTF-8等,Tomcat控制台的乱码问题只需要把日志配置文件中的UTF-8格式改成GBK格式就行解决方法:1、找到Tomcat的安装目录下conf文件夹2、打开conf文件夹中的logging.properties文件,并搜索找......
  • 服务器虚拟化:现代IT基础设施的基石
    服务器虚拟化:现代IT基础设施的基石服务器虚拟化是一种通过将物理服务器资源分割为多个逻辑资源(即虚拟服务器)的技术,每个虚拟服务器都能独立运行应用程序和操作系统。这种技术极大地提升了资源利用率、灵活性和经济效益,成为现代IT基础设施的重要组成部分。技术原理与架构服......