Node. JS segment resume: Implementation of the Nginx configuration file multipart download function, node. jsng.pdf
Html5 provides a new Range label for multipart object download. You can configure this label in Node. JS to implement multipart download of files.
Header label
Request Header: download the file content after 3744
range: bytes=3744-
Response Header: the total length of the file is 15522643 bytes.
accept-ranges': 'bytes'content-range': 'bytes */15522643'
Nginx Configuration
First, configure Nginx to support returned range tags. Simply add add_header Accept-Ranges bytes;
server { listen 80; server_name adksdf.com; location ~ ^/(img/|js/|css/|upload/|font/|fonts/|res/|icon) { add_header Access-Control-Allow-Origin *; add_header Accept-Ranges bytes; root /var/www/...; access_log off; expires max; } ...}
After it is enabled, if the node. js end sends the request information containing the range header, nginx will return the information related to the range:
This is a complete Response Header. Note the following:content-length
It is not the total length of the file, but the length of the current range.
{ server: 'nginx', date: 'Wed, 24 Jan 2018 02:43:20 GMT', 'content-type': 'application/zip', 'content-length': '12420187', 'last-modified': 'Tue, 16 Jan 2018 12:09:47 GMT', connection: 'close', etag: '"5a5deb8b-ecdb53"', expires: 'Thu, 31 Dec 2037 23:55:55 GMT', 'cache-control': 'max-age=315360000', 'access-control-allow-origin': '*', 'accept-ranges': 'bytes', 'content-range': 'bytes 3102456-15522642/15522643' }
You can obtain the total File Size Based on the content-range in the header.
Node. JS implementation
This example detects half of the local files, creates a file stream in 'r + 'read/write mode, and writes the response stream to the file.
Here we will add range support to the statement file.
Var reqOptions = {url: packageUrl, headers :{}} var filepath = '/path/to/your/part/file' var fileOptions ={} fs. stat (filepath, function (err, states) {if (states) {// Range: bytes = 3744-reqOptions. headers ['range'] = 'bytes = '+ states. size + '-' fileOptions = {start: states. size, flags: 'r + '} // create the http object method var reqUrl = reqOptions. url var urlObj = url. parse (reqUrl) var options = {hostname: urlObj. hostname, port: urlObj. port, path: urlObj. pathname, headers: reqOptions. headers | |{}} var req = http. request (options, function (res) {var events es = [] var err = null var statusCode = res. statusCode var headers = res. headers var ws = fs. createWriteStream (filepath, fileOptions) ws. on ('error', function (e) {console. log ('ws error', e)}) res. on ('data', function (chrunk) {ws. write (chrunk)}) res. on ('error', function (err) {ws. end ()}) res. on ('end', function () {ws. end ()}) req. on ('error', function (e) {cb & cb (e, null, {}) req. end ()...})
Response Header
Another status code, such as 206 or 416, may be returned when requesting nginx. The meaning is as follows:
206 Partial Content
Partial file content is returned.
416 Requested Range Not Satisfiable
The requested range exceeds the file size.
Summary
The above is a small part of the Node. JS segment resume: the implementation method of the Nginx configuration file multipart download function. I hope it will be helpful to you. If you have any questions, please leave a message and I will reply to you in a timely manner. Thank you very much for your support for the help House website!