为了让nginx支持文件上传,需要下载并运行带有nginx-upload-module模块的容器:
sudopodmanpulldocker.io/dimka2014/nginx-upload-with-progress-modules:latest
sudopodman-d--namenginx-p83:80docker.io/dimka2014/nginx-upload-with-progress-modules
该容器同时带有nginx-upload-module模块和nginx-upload-progress-module模块。
注意该容器是,没有bash,有些命令与其它发行版本的Linux不一样。
sudopodmanexec-itnginx/bin/sh
作为文件服务器,需要显示本地时间,默认不是本地时间。通过下面一系列命令设置为本地时间:
echo"Asia/Shanghai">/etc/timezone
cp/usr/share/zoneinfo/Asia/Shanghai/etc/localtime
apkdeltzdata
创建文件服务器的根目录:
mkdir-p/nginx/share
二、配置nginx
charsetutf-8;#设置字符编码,避免中文乱码
autoindexon;#开启索引功能
autoindex_exact_sizeoff;#关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb)
autoindex_localtimeon;#显示本地时间
}
此时我们的文件服务就配置好了,需要使用下面的命令让配置生效:
nginx-sreload
三、支持文件上传
上面的配置已经完成文件服务器的配置了,但是不能上传文件,想要上传文件,还需要做如下配置:
charsetutf-8;#设置字符编码,避免中文乱码
upload_limit_rate1M;#限制上传速度最大1M
root/nginx;#upload.html所在路径
#设置后端处理交由@rename处理。由于nginx-upload-module模块在存储时并不是按上传的文件名存储的,所以需要自行改名。
#指定上传文件存放目录,1表示按1位散列,将上传文件随机存到指定目录下的0、1、2、...、8、9目录中(这些目录要手动建立)
#上传文件的访问权限,user:r表示用户只读,w表示可写
upload_store_accessuser: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_cleanup400404499500-505;
proxy_passhttp://localhost:81;
}
上面的配置中,临时存储时是按1位散列来存储的,需要在上传目录下手动创建0~9几个目录。
chownnginx:root.-R
2.添加upload.html
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<title>上传</title>

<formname="upload"method="POST"enctype="multipart/form-data"action="upload">
<inputtype="file"name="file"/>
<inputtype="submit"name="submit"value="上传"/>
</html>
3.添加后面的处理服务
需要先安装python及所需的库
pip3installshutilwhich
python服务源码:
filenames=dt.get('file.name')
tmp_path=dt.get("file.tmp_path")
filepaths=dt.get("file.path")
count=filenames.__len__()
dir=os.path.abspath(filepaths[0])
print("rename%sto%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无访问权限
redirect("50x.html")#如果是在容器中部署的nginx且映射了不同的端口,需要指定IP,端口
redirect('/')#如果是在容器中部署的nginx且映射了不同的端口,需要指定IP,端口
run(host='localhost',port=81)
四、获取上传进度
#开辟一个空间proxied来存储跟踪上传的信息1MB
upload_progressproxied1m;
#上传完成后,仍然保存上传信息5s
<formid="upload"enctype="multipart/form-data"action="/upload"method="post"onsubmit="openProgressBar();returntrue;">
<inputname="file"type="file"label="fileupload"/>
<inputtype="submit"value="UploadFile"/>
<divid="progressbar"></div>
<divid="tp">(progress)</div>
<scripttype="text/javascript">
functionopenProgressBar(){
uuid+=Math.floor(Math.random()*16).toString(16);
document.getElementById("upload").action="/upload?X-Progress-ID="+uuid;
interval=window.setInterval(function(){
varreq=newXMLHttpRequest();
req.open("GET","/progress",1);
req.setRequestHeader("X-Progress-ID",uuid);
req.onreadystatechange=function(){
varupload=eval(req.responseText);
document.getElementById('tp').innerHTML=upload.state;
if(upload.state=='done'||upload.state=='uploading'){
varbar=document.getElementById('progressbar');
varw=400*upload.received/upload.size;
if(upload.state=='done'){
window.clearTimeout(interval);
if(upload.state=='error'){
window.clearTimeout(interval);
</script>
以上就是在容器中怎么使用nginx搭建上传下载的文件服务器的详细内容,更多请关注主机测评网其它相关文章!
本文来源:国外服务器--nginx做文件服务器
本文地址:https://www.idcbaba.com/guowai/3430.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。



