nginx-upload-module模块实现文件断点续传_nginx upload module 断点续传 进度(1)

简介: nginx-upload-module模块实现文件断点续传_nginx upload module 断点续传 进度(1)
upload_set_form_field $upload_field_name.path "$upload_tmp_path";
    }
 
     location @uploadHandler {
            proxy_pass http://backend-host;
    }
[...]
}
这里在server里定义了upload location,这个location是上传的接口,还有@uploadHandler location,是当文件上传完成后,nginx模块会对这个location发送一些必要的信息,如文件上传的路径,这里涉及了几个指令:
> 
> upload\_pass @uploadHandler:上传完成后会发送必要的数据到@uploadHandler;  
>  upload\_store /usr/local/nginx/upload\_temp 1: 文件上传的临时目录;  
>  upload\_set\_form\_field $upload\_field\_name.path “$upload\_tmp\_path”: 设置文件上传完成后,把文件临时路径发送给upload\_pass指定的location。
> 
> 
> 
**断点续传示例**
**nginx.conf配置**
server {
[…]
location /resumable_upload {
upload_resumable on;
upload_state_store /usr/local/nginx/upload_temp ;
upload_pass @drivers_upload_handler;
upload_store /usr/local/nginx/upload_temp;
upload_set_form_field u p l o a d f i e l d n a m e . p a t h " upload_field_name.path "uploadfieldname.path"upload_tmp_path";
}
location @resumable_upload_handler {
           proxy_pass http://localhost:8002;
    }
[...]
}
> 
> 与上一步multipart/form-data表单上传示例配置不同的地方有:  
>  upload\_resumable on: 开启断点续传功能;  
>  upload\_state\_store /usr/local/nginx/upload\_temp: 设置断点续传状态文件存储的目录。
> 
> 
> 
**上传文件第一个片段**
POST /upload HTTP/1.1
Host: example.com
Content-Length: 51201
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=“big.TXT”
X-Content-Range: bytes 0-51200/511920
Session-ID: 1111215056
<0-51200的字节文件数据>
**上传文件第一个片段服务器响应**
HTTP/1.1 201 Created
Date: Thu, 02 Sep 2010 12:54:40 GMT
Content-Length: 14
Connection: close
Range: 0-51200/511920
0-51200/511920
**上传文件最后一个片段**
POST /upload HTTP/1.1
Host: example.com
Content-Length: 51111
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=“big.TXT”
X-Content-Range: bytes 460809-511919/511920
Session-ID: 1111215056
<460809-511919字节文件数据>
**上传文件最后一个片段服务器响应**
HTTP/1.1 200 OK
Date: Thu, 02 Sep 2010 12:54:43 GMT
Content-Type: text/html
Connection: close
Content-Length: 2270
< 响应的内容>
**请求头说明**

请求头 说明

Content-Disposition attachment, filename=“上传的文件名”

Content-Type 待上传文件的mime type,如application/octet-stream(注:不能为multipart/form-data)

X-Content-Range 待上传文件字节范围,如第一片段bytes 0-51200/511920,最后一个片段bytes 460809-511919/511920(注:文件第一个字节标号为0,最后一个字节标号为n-1,其中n为文件字节大小)

X-Session-ID 上传文件的标识,由客户端随机指定.因为是断点续传,客户端必须确保同一个文件的所有片段上传标识一致

Content-Length 上传片段的大小

**Python上传demo**

#!/usr/bin/python

-- coding: utf-8 --

import os.path
import requests
import hashlib

待上传文件路径

FILE_UPLOAD = “/tmp/testfile”

上传接口地址

UPLOAD_URL = “http://host/drivers_upload”

单个片段上传的字节数

SEGMENT_SIZE = 1048576
def upload(fp, file_pos, size, file_size):
session_id = get_session_id()
fp.seek(file_pos)
payload = fp.read(size)
content_range = “bytes {file_pos}-{pos_end}/{file_size}”.format(file_pos=file_pos,
pos_end=file_pos+size-1,file_size=file_size)
headers = {‘Content-Disposition’: ‘attachment; filename=“big.TXT”’,‘Content-Type’: ‘application/octet-stream’,
‘X-Content-Range’:content_range,‘Session-ID’: session_id,‘Content-Length’: size}
res = requests.post(UPLOAD_URL, data=payload, headers=headers)
print(res.text)

根据文件名hash获得session id

def get_session_id():
m = hashlib.md5()
file_name = os.path.basename(FILE_UPLOAD)
m.update(file_name)
return m.hexdigest()
def main():


相关文章
|
4天前
|
缓存 应用服务中间件 nginx
安装nginx-http-flv-module模块
本文介绍如何为Nginx安装`nginx-http-flv-module`模块。此模块基于`nginx-rtmp-module`二次开发,不仅具备原模块的所有功能,还支持HTTP-FLV播放、GOP缓存、虚拟主机等功能。安装步骤包括:确认Nginx版本、下载相应版本的Nginx与模块源码、重新编译Nginx并加入新模块、验证模块安装成功。特别注意,此模块已包含`nginx-rtmp-module`功能,无需重复编译安装。
36 1
|
6天前
|
JavaScript 应用服务中间件 PHP
nginx server 禁止特定目录下的某类文件访问
【8月更文挑战第26天】这段Nginx配置代码旨在保护`/uploads/`目录下的文件,禁止执行任何`.php`, `.html`, `.htm`, 或 `.js`等潜在有害文件,即便被访问也无法运行。取而代之的是重定向到首页。为了实现这一设置,用户需要定位到对应子域名的`.conf`配置文件中进行相应修改。若网站支持多个访问域名,则需确保在正确的`.conf`文件中实施此配置。
17 1
|
8天前
|
负载均衡 应用服务中间件 Linux
在Linux中,常用的 Nginx 模块有哪些,常来做什么?
在Linux中,常用的 Nginx 模块有哪些,常来做什么?
|
13天前
|
存储 监控 应用服务中间件
查看nginx日志文件
器性能和提高网站可用性。掌握日志文件的路径、查看方法和基本分析技能对于任何服务器管理员来说都是必备技能。
32 1
|
20天前
|
缓存 前端开发 应用服务中间件
Nginx:location配置模块的用法(二)
Nginx:location配置模块的用法(二)
20 2
|
17天前
|
Ubuntu 前端开发 JavaScript
如何在 Ubuntu 14.04 上为 Nginx 添加 gzip 模块
如何在 Ubuntu 14.04 上为 Nginx 添加 gzip 模块
17 0
|
18天前
|
应用服务中间件 Linux nginx
Nginx log 日志文件较大,按日期生成 实现日志的切割
Nginx log 日志文件较大,按日期生成 实现日志的切割
79 0
|
应用服务中间件 nginx 数据格式
Nginx 学习笔记(四)nginx-module-vts模块
看看已经搭建好的效果图 1、基本信息 2、过滤信息 3、上游服务器 4、其他进程  1、获取组区域(默认返回json格式数据) (1)mainZones https://www.tinywan.
3006 0
|
13天前
|
应用服务中间件 nginx Docker
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
这篇文章介绍了如何通过域名在本地访问虚拟机上的nginx服务,包括创建nginx容器、修改配置文件、修改本地host文件以及进行访问测试的详细步骤。文章提供了具体的Docker命令来创建并配置nginx容器,展示了配置文件的修改示例,说明了如何在本地系统的hosts文件中添加虚拟机IP和自定义域名,以及如何通过浏览器进行测试访问。
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
|
9天前
|
Ubuntu 应用服务中间件 Linux
在Linux中,如何配置Web服务器(如Apache或Nginx)?
在Linux中,如何配置Web服务器(如Apache或Nginx)?