Maison > interface Web > js tutoriel > Node.JS implémente le téléchargement segmenté des fichiers de configuration pour les téléchargements de CV segmentés

Node.JS implémente le téléchargement segmenté des fichiers de configuration pour les téléchargements de CV segmentés

php中世界最好的语言
Libérer: 2018-04-11 15:22:15
original
2374 Les gens l'ont consulté

Cette fois, nous vous proposons Node.JS pour implémenter le téléchargement segmenté du fichier de configuration , et Node.JS pour implémenter le téléchargement segmenté du fichier de configuration pour un CV segmenté. sont les précautions pour le téléchargement de segments ? Ce qui suit est un cas pratique, jetons un coup d'oeil.

Balise d'en-tête

En-tête de demande : télécharger le contenu du fichier après 3744

range: bytes=3744-
Copier après la connexion

En-tête de réponse de retour : longueur totale du fichier 15522643 octets

accept-ranges': 'bytes'
content-range': 'bytes */15522643'
Copier après la connexion

Configuration Nginx

Tout d'abord, vous devez configurer Nginx pour prendre en charge le retour des balises de plage. Il est très simple d'ajouter des octets add_header Accept-Ranges ; Cette ligne peut être

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;
 }
 ...
}
Copier après la connexion

. Après l'activation, si le côté node.js envoie des informations de demande contenant l'en-tête de plage, alors nginx renverra des informations relatives à la plage :

Il s'agit d'un en-tête de réponse complet. Notez que content-length ici n'est pas la longueur totale du fichier, mais la longueur de la plage actuelle.

{ 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' }
Copier après la connexion

La taille totale du fichier peut être obtenue en fonction de la plage de contenu de cet en-tête.

Implémentation de Node.JS

Cet exemple détecte d'abord les fichiers à moitié téléchargés localement, puis crée un flux de fichiers en mode lecture-écriture « r+ » et écrit le flux de réponse dans le fichier.

Ici, la prise en charge de la plage sera ajoutée au fichier de déclaration.

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+' }
 }
 //创建 http 对象方法
 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 receives  = []
  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()
 ...
})
Copier après la connexion

Retour à l'en-tête

Lors de la demande de nginx, d'autres codes d'état peuvent être renvoyés, tels que 206 ou 416, avec la signification suivante :

206 Contenu partiel

Ce qui est renvoyé fait partie du contenu du fichier

416 Plage demandée non satisfaisante

La plage demandée dépasse la taille du fichier                                        

Je pense que vous maîtrisez la méthode de lecture de cet article. Pour plus de passionnant, veuillez prêter attention aux autres articles connexes sur le site Web PHP chinois !

Lecture recommandée :

Comment gérer les sous-itinéraires qui ne s'affichent pas dans la barre de navigation inférieure de vue.js

Comment implémenter la randomisation dans JS Switch WeChat ID

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers numéros
c++ appelle javascript
Depuis 1970-01-01 08:00:00
0
0
0
Qu’est-ce que le garbage collection JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
Que sont les fonctions de hook JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
Comment obtenir la date actuelle en JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal