Maison interface Web js tutoriel Comment télécharger de manière asynchrone des fichiers à l'aide de HTML5 et AJAX

Comment télécharger de manière asynchrone des fichiers à l'aide de HTML5 et AJAX

Feb 25, 2025 pm 05:31 PM

How to Asynchronously Upload Files Using HTML5 and Ajax

Points de base

  • Le téléchargement de fichiers de manière asynchrone à l'aide de HTML5 et AJAX peut être effectué en arrière-plan, permettant aux utilisateurs d'effectuer d'autres tâches sur la page pendant le téléchargement. Ce processus implique la création de formulaires HTML pour télécharger des fichiers sur des pages PHP, et JavaScript garantit que seules des images JPG avec moins de 300 000 octets sont téléchargées.
  • La fonction de téléchargement JavaScript nécessite un objet XMLHTTPRequest2 (disponible dans Firefox et Chrome). La méthode .Open () de XMLHTTPRequest est définie pour publier les données sur la page PHP, définir l'en-tête HTTP sur le nom du fichier et transmettre l'objet de fichier à la méthode .Send ().
  • Le fichier PHP vérifie l'en-tête http x_filename pour distinguer les demandes AJAX et la publication de formulaire standard. Si le nom de fichier est défini, PHP récupérera les données publiées et la publiera dans un nouveau fichier dans le dossier "Uploads". Le post HTML Multipart / Form Data standard est géré à l'aide de la fonction PHP $ _FILE habituelle.

Dans les articles précédents, nous avons appris à utiliser HTML5 pour faire glisser et déposer des fichiers et à ouvrir des fichiers à l'aide de HTML5 et JavaScript. Nous avons maintenant un ensemble valide de fichiers qui peuvent télécharger chaque fichier sur le serveur. Ce processus a lieu de manière asynchrone en arrière-plan, afin que les utilisateurs puissent effectuer d'autres tâches sur la page au fur et à mesure que le processus progresse.

html

Vérifions à nouveau notre formulaire HTML:

<fieldset><legend>HTML文件上传</legend><div> <label for="fileselect">要上传的文件:</label> <div>或在此处拖放文件</div></div><div>上传文件</div></fieldset>
Copier après la connexion
Copier après la connexion

Nous téléchargeons le fichier sur la page PHP upload.php. Lorsque l'utilisateur clique sur "Télécharger le fichier", la page traitera les demandes de téléchargement AJAX et la publication de formulaire standard. Notre JavaScript garantira que seules les images JPG sont téléchargées avec moins de 300 000 octets (la valeur spécifiée dans max_file_size).

javascript

Tout d'abord, nous devons ajouter une ligne à la fonction FileSelecthandler () appelée lors de la sélection ou de la glisse et de supprimer un ou plusieurs fichiers. Dans notre boucle de fichier, nous appellerons une autre fonction - uploadFile ():

// 文件选择
function FileSelectHandler(e) {

    // 取消事件和悬停样式
    FileDragHover(e);

    // 获取FileList对象
    var files = e.target.files || e.dataTransfer.files;

    // 处理所有File对象
    for (var i = 0, f; f = files[i]; i++) {
        ParseFile(f);
        UploadFile(f);
    }

}
Copier après la connexion

Le téléchargement de fichiers nécessite un objet XMLHTTPRequest2, qui est actuellement disponible dans Firefox et Chrome. Avant de passer l'appel AJAX, nous nous assurons que la méthode .Upload () est disponible et que nous avons un JPG avec une taille de fichier plus petite que la valeur du formulaire max_file_size:

// 上传JPEG文件
function UploadFile(file) {

    var xhr = new XMLHttpRequest();
    if (xhr.upload && file.type == "image/jpeg" && file.size < $id("MAX_FILE_SIZE").value) {

        // 开始上传
        xhr.open("POST", $id("upload").action, true);
        xhr.setRequestHeader("X_FILENAME", file.name);
        xhr.send(file);

    }

}
Copier après la connexion

La méthode .open () de XMLHttpRequest est définie pour publier les données sur télécharger.php (la propriété d'action de notre formulaire de téléchargement). De plus, nous définissons l'en-tête HTTP sur le nom du fichier et passons l'objet de fichier à la méthode .Send ().

php

Notre fichier php upload.php vérifie désormais l'en-tête http x_filename pour distinguer les demandes AJAX et la publication de formulaire standard:

<?php $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false); ?>
Copier après la connexion

Si le nom de fichier est défini, PHP peut récupérer les données publiées et les sortir dans un nouveau fichier dans le dossier "uploads". Étonnamment, cela peut être réalisé avec une seule ligne de code:

if ($fn) {

    // AJAX调用
    file_put_contents(
        'uploads/' . $fn,
        file_get_contents('php://input')
    );
    echo "$fn 上传成功";
    exit();

}
Copier après la connexion

Le message standard HTML Multipart / Form Data peut être géré à l'aide de la fonction PHP $ _FILE habituelle:

<fieldset><legend>HTML文件上传</legend><div> <label for="fileselect">要上传的文件:</label> <div>或在此处拖放文件</div></div><div>上传文件</div></fieldset>
Copier après la connexion
Copier après la connexion

Vous pouvez afficher la page de démonstration, mais notez qu'elle est hébergée sur des serveurs sans support PHP et que les téléchargements ne se produisent pas. Téléchargez donc le fichier pour vérifier le code et l'installer sur votre propre serveur PHP.

Le code ci-dessus fonctionne, mais l'utilisateur ne sait pas si le téléchargement de fichiers a démarré, terminé ou échoué. Vous devez lire le dernier numéro de cette série: Comment créer une barre de progression de téléchargement de fichiers dans HTML5 et JavaScript

FAQ (FAQ) À propos de HTML5 Ajax Fichier Upload

(La partie FAQ est omise ici parce que cette partie n'a rien à voir avec les objectifs pseudo-originaux et est plus long. Il est normal de conserver la FAQ, mais la langue doit être réorganisée pour la rendre cohérente avec le style global de la Article.)

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)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois 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 créer et publier mes propres bibliothèques JavaScript? Comment créer et publier mes propres bibliothèques JavaScript? Mar 18, 2025 pm 03:12 PM

L'article discute de la création, de la publication et du maintien des bibliothèques JavaScript, en se concentrant sur la planification, le développement, les tests, la documentation et les stratégies de promotion.

Comment optimiser le code JavaScript pour les performances dans le navigateur? Comment optimiser le code JavaScript pour les performances dans le navigateur? Mar 18, 2025 pm 03:14 PM

L'article traite des stratégies pour optimiser les performances JavaScript dans les navigateurs, en nous concentrant sur la réduction du temps d'exécution et la minimisation de l'impact sur la vitesse de chargement de la page.

Que dois-je faire si je rencontre l'impression de code brouillé pour les reçus en papier thermique frontal? Que dois-je faire si je rencontre l'impression de code brouillé pour les reçus en papier thermique frontal? Apr 04, 2025 pm 02:42 PM

Des questions et des solutions fréquemment posées pour l'impression de billets thermiques frontaux pour le développement frontal, l'impression de billets est une exigence commune. Cependant, de nombreux développeurs mettent en œuvre ...

Comment déboguer efficacement le code JavaScript à l'aide d'outils de développeur de navigateur? Comment déboguer efficacement le code JavaScript à l'aide d'outils de développeur de navigateur? Mar 18, 2025 pm 03:16 PM

L'article traite du débogage efficace de JavaScript à l'aide d'outils de développeur de navigateur, de se concentrer sur la définition des points d'arrêt, de l'utilisation de la console et d'analyser les performances.

Qui est payé plus de python ou de javascript? Qui est payé plus de python ou de javascript? Apr 04, 2025 am 12:09 AM

Il n'y a pas de salaire absolu pour les développeurs Python et JavaScript, selon les compétences et les besoins de l'industrie. 1. Python peut être davantage payé en science des données et en apprentissage automatique. 2. JavaScript a une grande demande dans le développement frontal et complet, et son salaire est également considérable. 3. Les facteurs d'influence comprennent l'expérience, la localisation géographique, la taille de l'entreprise et les compétences spécifiques.

Comment utiliser les cartes source pour déboguer le code JavaScript minifié? Comment utiliser les cartes source pour déboguer le code JavaScript minifié? Mar 18, 2025 pm 03:17 PM

L'article explique comment utiliser les cartes source pour déboguer JavaScript minifiée en le mappant au code d'origine. Il discute de l'activation des cartes source, de la définition de points d'arrêt et de l'utilisation d'outils comme Chrome Devtools et WebPack.

Comment fusionner les éléments du tableau avec le même ID dans un seul objet en utilisant JavaScript? Comment fusionner les éléments du tableau avec le même ID dans un seul objet en utilisant JavaScript? Apr 04, 2025 pm 05:09 PM

Comment fusionner les éléments du tableau avec le même ID dans un seul objet en JavaScript? Lors du traitement des données, nous rencontrons souvent la nécessité d'avoir le même ID ...

La différence dans Console.Log de sortie Résultat: Pourquoi les deux appels sont-ils différents? La différence dans Console.Log de sortie Résultat: Pourquoi les deux appels sont-ils différents? Apr 04, 2025 pm 05:12 PM

Discussion approfondie des causes profondes de la différence de sortie Console.log. Cet article analysera les différences dans les résultats de sortie de la fonction Console.log dans un morceau de code et expliquera les raisons derrière. � ...

See all articles