Cara menggunakan nginx untuk membina pelayan fail untuk memuat naik dan memuat turun dalam bekas

王林
Lepaskan: 2023-05-15 23:49:04
ke hadapan
1889 orang telah melayarinya

1. Pasang bekas nginx

Untuk nginx menyokong muat naik fail, anda perlu memuat turun dan menjalankan bekas dengan modul nginx-upload-module:

sudo podman pull docker.io/dimka2014/nginx-upload-with-progress-modules:latest
sudo podman -d --name nginx -p 83:80 docker.io/dimka2014/nginx-upload-with-progress-modules
Salin selepas log masuk

Bekas turut disertakan dengan modul nginx- upload-module dan modul nginx-upload-progress-modul.

NotaBekasnya ialah Alpine Linux, tiada bash dan beberapa arahan berbeza daripada pengedaran Linux yang lain.

Gunakan arahan berikut untuk memasuki bekas:

sudo podman exec -it nginx /bin/sh
Salin selepas log masuk

Sebagai pelayan fail, ia perlu memaparkan waktu tempatan, yang bukan waktu tempatan secara lalai. Tetapkan waktu tempatan melalui siri arahan berikut:

apk update
apk add tzdata
echo "Asia/Shanghai" > /etc/timezone
rm -rf /etc/localtime
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
apk del tzdata
Salin selepas log masuk

Buat direktori akar pelayan fail:

mkdir -p /nginx/share
Salin selepas log masuk

2. Konfigurasikan nginx

Laluan fail konfigurasi ialah /etc/nginx/conf.d/default.conf, Memandangkan

server {
    ……
    charset utf-8; # 设置字符编码,避免中文乱码
    location / {
            root   /nginx/share; # 根目录
            autoindex   on;  # 开启索引功能
            autoindex_exact_size off; # 关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb)
            autoindex_localtime on; # 显示本地时间
        }
}
Salin selepas log masuk

perkhidmatan fail kami kini dikonfigurasikan Anda perlu menggunakan arahan berikut untuk membuat konfigurasi berkuat kuasa:

nginx -s reload
Salin selepas log masuk

Cara menggunakan nginx untuk membina pelayan fail untuk memuat naik dan memuat turun dalam bekas

3. Sokongan muat naik fail

1. Konfigurasikan nginx

Konfigurasi di atas telah menyelesaikan konfigurasi pelayan fail, tetapi fail tidak boleh dimuat naik Jika anda ingin memuat naik fail, anda perlu membuat konfigurasi berikut:

server {
    ……
    charset utf-8; # 设置字符编码,避免中文乱码
    client_max_body_size 32m; 
    upload_limit_rate 1M; # 限制上传速度最大1M
    
    # 设置upload.html页面路由
    location = /upload.html {                                                        
            root /nginx;  # upload.html所在路径                                                       
    }

    location /upload {
            # 限制上传文件最大30MB
            upload_max_file_size 30m;
            # 设置后端处理交由@rename处理。由于nginx-upload-module模块在存储时并不是按上传的文件名存储的,所以需要自行改名。
            upload_pass @rename;
            # 指定上传文件存放目录,1表示按1位散列,将上传文件随机存到指定目录下的0、1、2、...、8、9目录中(这些目录要手动建立)
            upload_store /tmp/nginx 1;
            # 上传文件的访问权限,user:r表示用户只读,w表示可写
            upload_store_access user:r;

            # 设置传给后端处理的表单数据,包括上传的原始文件名,上传的内容类型,临时存储的路径
            upload_set_form_field $upload_field_name.name "$upload_file_name";
            upload_set_form_field $upload_field_name.content_type "$upload_content_type";
            upload_set_form_field $upload_field_name.path "$upload_tmp_path";
            upload_pass_form_field "^submit$|^description$";

            # 设置上传文件的md5值和文件大小
            upload_aggregate_form_field "${upload_field_name}_md5" "$upload_file_md5";
            upload_aggregate_form_field "${upload_field_name}_size" "$upload_file_size";

            # 如果出现下列错误码则删除上传的文件
            upload_cleanup 400 404 499 500-505;
     }

    location @rename {
            # 后端处理
            proxy_pass http://localhost:81;
    }
}
Salin selepas log masuk

di atas Dalam konfigurasi, storan sementara adalah berdasarkan cincangan 1-bit dan anda perlu mencipta beberapa direktori 0~9 secara manual dalam direktori muat naik.

 mkdir -p /tmp/nginx
 cd /tmp/nginx
 mkdir 1 2 3 4 5 6 7 8 9 0
 chown nginx:root . -R
Salin selepas log masuk

2. Tambah muat naik.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>上传</title>
</head>
<body>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<form name="upload" method="POST" enctype="multipart/form-data" action="upload">
<input type="file" name="file"/>
<input type="submit" name="submit" value="上传"/>
</form>
</body>
</html>
Salin selepas log masuk

3 Tambah perkhidmatan pemprosesan seterusnya

Anda perlu memasang python dan perpustakaan yang diperlukan terlebih dahulu

apk add python3
pip3 install bottle
pip3 install shutilwhich
Salin selepas log masuk

python. Kod sumber perkhidmatan:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

from bottle import *
import shutil

@post("/upload")
def postExample():
    try:
        dt = request.forms.dict
        filenames = dt.get(&#39;file.name&#39;)
        tmp_path = dt.get("file.tmp_path")
        filepaths = dt.get("file.path")
        count = filenames.__len__()
        dir = os.path.abspath(filepaths[0])
        for i in range(count):
            print("rename %s to %s" % (tmp_path[i],  os.path.join(dir, filenames[i])))
            target = os.path.join(dir, filenames[i])
            shutil.move(tmp_path[i], target)
            shutil.chown(target, "nginx", "root") # 由于shutil.move不会保持用户归属,所以需要显示修改,否则访问时会报403无访问权限
    except Exception as e:
        print("Exception:%s" % e)
        redirect("50x.html") # 如果是在容器中部署的nginx且映射了不同的端口,需要指定IP,端口
    redirect(&#39;/&#39;) # 如果是在容器中部署的nginx且映射了不同的端口,需要指定IP,端口

run(host=&#39;localhost&#39;, port=81)
Salin selepas log masuk

4 Dapatkan kemajuan muat naik

1 Ubah suai konfigurasi

# 开辟一个空间proxied来存储跟踪上传的信息1MB
upload_progress proxied 1m;
server {
    ……
    location ^~ /progress {
        # 报告上传的信息
        report_uploads proxied;
    }
    location /upload {
        ...
        # 上传完成后,仍然保存上传信息5s
        track_uploads proxied 5s;
    }
}
Salin selepas log masuk

2. Ubah suai halaman muat naik

rreee

Cara menggunakan nginx untuk membina pelayan fail untuk memuat naik dan memuat turun dalam bekas

Atas ialah kandungan terperinci Cara menggunakan nginx untuk membina pelayan fail untuk memuat naik dan memuat turun dalam bekas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!