Maison interface Web js tutoriel Explication détaillée des étapes pour implémenter le téléchargement et le téléchargement de fichiers dans koa2

Explication détaillée des étapes pour implémenter le téléchargement et le téléchargement de fichiers dans koa2

Apr 27, 2018 pm 05:22 PM
koa2 步骤

Cette fois, je vais vous apporter une explication détaillée des étapes pour mettre en œuvre le téléchargement de fichierstéléchargement dans koa2 Quelles sont les précautions pour la mise en œuvre du téléchargement et du téléchargement de fichiers dans koa2. est un cas pratique, jetons un coup d'oeil.

Avant-propos

Le téléchargement et le téléchargement sont assez courants dans les applications Web, qu'il s'agisse d'images ou d'autres fichiers. Dans Koa, il existe de nombreux middleware qui peuvent nous aider à implémenter rapidement des fonctions.

Téléchargement de fichiers

Lors du téléchargement de fichiers dans le front-end, nous les téléchargeons via des formulaires, mais les fichiers téléchargés ne peuvent pas être transmis via ctx comme les paramètres ordinaires sur le serveur côté .request.body obtient. Nous pouvons utiliser le middleware koa-body pour gérer le téléchargement de fichiers, ce qui peut placer le corps de la requête dans ctx.request.

// app.js
const koa = require('koa');
const app = new koa();
const koaBody = require('koa-body');
app.use(koaBody({
  multipart: true,
  formidable: {
    maxFileSize: 200*1024*1024 // 设置上传文件大小最大限制,默认2M
  }
}));
app.listen(3001, ()=>{
  console.log('koa is listening in 3001');
})
Copier après la connexion

Après avoir utilisé le middleware, vous pouvez obtenir le contenu du fichier téléchargé dans ctx.request.body.files. Il faut prêter attention à la définition de maxFileSize, sinon une erreur sera signalée dès que le fichier téléchargé dépasse la limite par défaut.

Après avoir reçu le fichier, nous devons enregistrer le fichier dans le répertoire et renvoyer une URL au front-end. Le processus dans le nœud est

  1. Créer un lecteur const de flux lisible = fs.createReadStream(file.path)

  2. Créer un écrivain const de flux inscriptible = fs.createWriteStream('upload/newpath.txt')

  3. Le flux lisible écrit le flux inscriptible via le tube reader.pipe(writer)

const router = require('koa-router')();
const fs = require('fs');
router.post('/upload', async (ctx){
 const file = ctx.request.body.files.file; // 获取上传文件
 const reader = fs.createReadStream(file.path); // 创建可读流
 const ext = file.name.split('.').pop(); // 获取上传文件扩展名
 const upStream = fs.createWriteStream(`upload/${Math.random().toString()}.${ext}`); // 创建可写流
 reader.pipe(upStream); // 可读流通过管道写入可写流
 return ctx.body = '上传成功';
})
Copier après la connexion

Cette méthode convient au téléchargement d'images, de fichiers texte, de fichiers compressés, etc.

Téléchargement de fichiers

koa-send est un middleware de service de fichiers statique qui peut être utilisé pour implémenter la fonction de téléchargement de fichiers.

const router = require('koa-router')();
const send = require('koa-send');
router.post('/download/:name', async (ctx){
 const name = ctx.params.name;
 const path = `upload/${name}`;
 ctx.attachment(path);
  await send(ctx, path);
})
Copier après la connexion

Il existe deux méthodes de téléchargement sur le front-end : window.open et la soumission de formulaire. Le window.open plus simple est utilisé ici.

<button onclick="handleClick()">立即下载</button>
<script>
 const handleClick = () => {
 window.open('/download/1.png');
 }
</script>
Copier après la connexion

Le window.open par défaut consiste ici à ouvrir une nouvelle fenêtre, à flasher puis à fermer, ce qui ne donne pas à l'utilisateur une bonne expérience. Vous pouvez ajouter le deuxième paramètre window.open('/download. /1 .png', '_self'); , il sera donc téléchargé directement dans la fenêtre actuelle. Cependant, cela remplace la page actuelle par l'url, ce qui déclenchera des événements de page tels que beforeunload. Si votre page écoute cet événement et effectue certaines opérations, cela aura un impact. Ensuite, vous pouvez également utiliser une fenêtre iframe masquée pour obtenir le même effet.

<button onclick="handleClick()">立即下载</button>
<iframe name="myIframe" style="display:none"></iframe>
<script>
 const handleClick = () => {
 window.open('/download/1.png', 'myIframe');
 }
</script>
Copier après la connexion

Téléchargement par lots

Il n'y a aucune différence entre le téléchargement par lots et le téléchargement unique, effectuez simplement quelques téléchargements supplémentaires. Il n’y a vraiment rien de mal à cela. Si vous regroupez autant de fichiers dans un package compressé et que vous téléchargez ensuite uniquement ce package compressé, l'expérience ne serait-elle pas meilleure ?

File Packaging

archiver est un module qui peut réaliser une fonction d'empaquetage multiplateforme dans Node.js, prenant en charge les formats zip et tar.

const router = require('koa-router')();
const send = require('koa-send');
const archiver = require('archiver');
router.post('/downloadAll', async (ctx){
 // 将要打包的文件列表
 const list = [{name: '1.txt'},{name: '2.txt'}];
 const zipName = '1.zip';
 const zipStream = fs.createWriteStream(zipName);
  const zip = archiver('zip');
  zip.pipe(zipStream);
 for (let i = 0; i < list.length; i++) {
 // 添加单个文件到压缩包
 zip.append(fs.createReadStream(list[i].name), { name: list[i].name })
 }
 await zip.finalize();
 ctx.attachment(zipName);
 await send(ctx, zipName);
})
Copier après la connexion

Si vous emballez directement l'intégralité du dossier, vous n'avez pas besoin de parcourir chaque fichier et de l'ajouter au package compressé

const zipStream = fs.createWriteStream('1.zip');
const zip = archiver('zip');
zip.pipe(zipStream);
// 添加整个文件夹到压缩包
zip.directory('upload/');
zip.finalize();
Copier après la connexion

Remarque : emballez l'intégralité du dossier et générez le fichier de package compressé Il ne peut pas être stocké dans ce dossier, sinon il sera conditionné en continu.

Problèmes d'encodage chinois

Lorsque le nom du fichier contient du chinois, des situations inattendues peuvent se produire. Ainsi, lors du téléchargement, s'il contient du chinois, j'encoderai le nom du fichier avec encodeURI() pour le sauvegarder, puis je le décrypterai avec decodeURI() lors du téléchargement.

ctx.attachment(decodeURI(path));
await send(ctx, path);
Copier après la connexion

ctx.attachment Définissez Content-Disposition sur "attachment" pour demander au client de demander le téléchargement. Utilisez le nom du fichier décodé comme nom du fichier téléchargé à télécharger, de sorte que lors du téléchargement local, le nom chinois soit toujours affiché.

Cependant, dans le code source de koa-send, le chemin du fichier sera décodé avec decodeURIComponent() :

// koa-send
path = decode(path)
function decode (path) {
 try {
  return decodeURIComponent(path)
 } catch (err) {
  return -1
 }
}
Copier après la connexion

A ce moment, après décodage, téléchargez le chemin contenant le chinois, et sur notre serveur, le chemin codé est stocké, donc naturellement le fichier correspondant est introuvable.

Pour résoudre ce problème, ne le laissez pas décoder. Si vous ne souhaitez pas toucher au code source de koa-send, vous pouvez utiliser un autre fichier middleware koa-send à la place.

const router = require('koa-router')();
const sendfile = require('koa-sendfile');
router.post('/download/:name', async (ctx){
 const name = ctx.params.name;
 const path = `upload/${name}`;
 ctx.attachment(decodeURI(path));
  await sendfile(ctx, path);
})
Copier après la connexion

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Idée d'implémentation de l'interception de demande vue axios (avec code)

Explication détaillée des étapes pour implémenter le panier et la sélection d'adresse dans vue2

Explication détaillée de l'utilisation du contrôle d'arborescence vue.js

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment faire de Google Maps la carte par défaut sur iPhone Comment faire de Google Maps la carte par défaut sur iPhone Apr 17, 2024 pm 07:34 PM

La carte par défaut sur l'iPhone est Maps, le fournisseur de géolocalisation propriétaire d'Apple. Même si la carte s’améliore, elle ne fonctionne pas bien en dehors des États-Unis. Il n'a rien à offrir par rapport à Google Maps. Dans cet article, nous discutons des étapes réalisables pour utiliser Google Maps afin de devenir la carte par défaut sur votre iPhone. Comment faire de Google Maps la carte par défaut sur iPhone Définir Google Maps comme application cartographique par défaut sur votre téléphone est plus facile que vous ne le pensez. Suivez les étapes ci-dessous – Étapes préalables – Vous devez avoir Gmail installé sur votre téléphone. Étape 1 – Ouvrez l'AppStore. Étape 2 – Recherchez « Gmail ». Étape 3 – Cliquez à côté de l'application Gmail

Cet identifiant Apple n'est pas encore utilisé dans l'iTunes Store : correctif Cet identifiant Apple n'est pas encore utilisé dans l'iTunes Store : correctif Jun 10, 2024 pm 05:42 PM

Lors de la connexion à iTunesStore à l'aide de l'AppleID, cette erreur indiquant "Cet AppleID n'a pas été utilisé dans iTunesStore" peut s'afficher à l'écran. Il n'y a pas de messages d'erreur à craindre, vous pouvez les corriger en suivant ces ensembles de solutions. Correctif 1 – Modifier l'adresse de livraison La principale raison pour laquelle cette invite apparaît dans l'iTunes Store est que vous n'avez pas la bonne adresse dans votre profil AppleID. Étape 1 – Tout d’abord, ouvrez les paramètres iPhone sur votre iPhone. Étape 2 – AppleID doit être au-dessus de tous les autres paramètres. Alors, ouvrez-le. Étape 3 – Une fois sur place, ouvrez l’option « Paiement et expédition ». Étape 4 – Vérifiez votre accès à l'aide de Face ID. étape

Étapes pour mettre à niveau vers la dernière version de WeChat (maîtrisez facilement la méthode de mise à niveau vers la dernière version de WeChat) Étapes pour mettre à niveau vers la dernière version de WeChat (maîtrisez facilement la méthode de mise à niveau vers la dernière version de WeChat) Jun 01, 2024 pm 10:24 PM

WeChat est l'une des plateformes de médias sociaux en Chine qui lance continuellement de nouvelles versions pour offrir une meilleure expérience utilisateur. La mise à niveau de WeChat vers la dernière version est très importante pour rester en contact avec sa famille et ses collègues, rester en contact avec ses amis et se tenir au courant des derniers développements. 1. Comprendre les fonctionnalités et améliorations de la dernière version Il est très important de comprendre les fonctionnalités et améliorations de la dernière version avant de mettre à niveau WeChat. Pour améliorer les performances et corriger des bugs, vous pouvez en savoir plus sur les différentes nouvelles fonctionnalités apportées par la nouvelle version en consultant les notes de mise à jour sur le site officiel ou sur l'App Store de WeChat. 2. Vérifiez la version actuelle de WeChat Nous devons vérifier la version de WeChat actuellement installée sur le téléphone mobile avant de mettre à niveau WeChat. Cliquez pour ouvrir l'application WeChat « Moi », puis sélectionnez le menu « À propos » où vous pouvez voir le numéro de version actuel de WeChat. 3. Ouvrez l'application

Comment fermer un compte vidéo WeChat ? Étapes détaillées pour fermer un compte vidéo WeChat Comment fermer un compte vidéo WeChat ? Étapes détaillées pour fermer un compte vidéo WeChat Jan 02, 2024 pm 11:57 PM

Pour comprendre comment fermer un compte vidéo WeChat, il faut d'abord savoir que WeChat, un logiciel de chat, est très riche en fonctionnalités. Pour différentes personnes, les comptes vidéo WeChat ont des fonctions différentes. Pour les gens ordinaires, le compte vidéo WeChat n'est qu'un canal de partage de courtes vidéos tournées par des individus, et ils peuvent partager des vidéos WeChat intéressantes. Pour d’autres, ils utilisent les comptes vidéo WeChat pour attirer du trafic. Naturellement, ils ne pourront peut-être pas accepter les commentaires des trolls et des trolls, ils voudront donc peut-être fermer le compte vidéo WeChat. Ensuite, l'éditeur de ce site Web vous présentera comment fermer le compte vidéo WeChat. Amis intéressés, venez jeter un œil. Les étapes pour fermer le compte vidéo WeChat sont les suivantes : Nous ouvrons d'abord WeChat, entrons dans le menu principal. page, et cliquez sur le bouton "I", ce qui nous amènera à une

L'application Shazam ne fonctionne pas sur iPhone : correctif L'application Shazam ne fonctionne pas sur iPhone : correctif Jun 08, 2024 pm 12:36 PM

Vous rencontrez des problèmes avec l’application Shazam sur iPhone ? Shazam vous aide à trouver des chansons en les écoutant. Cependant, si Shazam ne fonctionne pas correctement ou ne reconnaît pas la chanson, vous devrez la dépanner manuellement. La réparation de l'application Shazam ne prendra pas longtemps. Alors, sans perdre plus de temps, suivez les étapes ci-dessous pour résoudre les problèmes avec l'application Shazam. Correctif 1 – Désactiver la fonctionnalité de texte en gras Le texte en gras sur iPhone peut être la raison pour laquelle Shazam ne fonctionne pas correctement. Étape 1 – Vous ne pouvez le faire qu’à partir des paramètres de votre iPhone. Alors, ouvrez-le. Étape 2 – Ensuite, ouvrez les paramètres « Affichage et luminosité ». Étape 3 – Si vous constatez que « Texte en gras » est activé

Les captures d'écran de l'iPhone ne fonctionnent pas : comment y remédier Les captures d'écran de l'iPhone ne fonctionnent pas : comment y remédier May 03, 2024 pm 09:16 PM

La fonction de capture d'écran ne fonctionne pas sur votre iPhone ? Prendre une capture d'écran est très simple car il vous suffit de maintenir enfoncés simultanément le bouton d'augmentation du volume et le bouton d'alimentation pour saisir l'écran de votre téléphone. Cependant, il existe d'autres moyens de capturer des images sur l'appareil. Correctif 1 – Utilisation d’Assistive Touch Prenez une capture d’écran à l’aide de la fonction Assistive Touch. Étape 1 – Accédez aux paramètres de votre téléphone. Étape 2 – Ensuite, appuyez pour ouvrir les paramètres d'accessibilité. Étape 3 – Ouvrez les paramètres Touch. Étape 4 – Ensuite, ouvrez les paramètres Assistive Touch. Étape 5 – Activez Assistive Touch sur votre téléphone. Étape 6 – Ouvrez « Personnaliser le menu supérieur » pour y accéder. Étape 7 – Il ne vous reste plus qu'à lier l'une de ces fonctions à votre capture d'écran. Alors cliquez sur le premier

Explication détaillée des étapes pour obtenir les autorisations d'administrateur système Win11 Explication détaillée des étapes pour obtenir les autorisations d'administrateur système Win11 Mar 08, 2024 pm 09:09 PM

Windows 11, en tant que dernier système d'exploitation lancé par Microsoft, est profondément apprécié des utilisateurs. Lors de l'utilisation de Windows 11, nous devons parfois obtenir les droits d'administrateur système afin d'effectuer certaines opérations nécessitant des autorisations. Ensuite, nous présenterons en détail les étapes pour obtenir les droits d'administrateur système dans Windows 11. La première étape consiste à cliquer sur "Menu Démarrer". Vous pouvez voir l'icône Windows dans le coin inférieur gauche. Cliquez sur l'icône pour ouvrir le "Menu Démarrer". Dans la deuxième étape, recherchez et cliquez sur "

Problème de zoom Safari sur iPhone : voici la solution Problème de zoom Safari sur iPhone : voici la solution Apr 20, 2024 am 08:08 AM

Si vous n'avez pas de contrôle sur le niveau de zoom dans Safari, faire avancer les choses peut être délicat. Donc, si Safari semble zoomé, cela pourrait être un problème pour vous. Voici quelques façons de résoudre ce problème mineur de zoom dans Safari. 1. Grossissement du curseur : sélectionnez « Affichage » > « Grossissement du curseur » dans la barre de menu Safari. Cela rendra le curseur plus visible sur l'écran, ce qui facilitera son contrôle. 2. Déplacez la souris : Cela peut paraître simple, mais parfois, le simple fait de déplacer la souris vers un autre emplacement de l'écran peut automatiquement la ramener à sa taille normale. 3. Utilisez les raccourcis clavier Fix 1 – Réinitialiser le niveau de zoom Vous pouvez contrôler le niveau de zoom directement depuis le navigateur Safari. Étape 1 – Lorsque vous êtes dans Safari

See all articles