Comment télécharger un tableau de fichiers à l'aide de formData
PHP中文网
PHP中文网 2017-07-05 11:02:53
0
3
1634

Parce que cliquer à nouveau sur input type='file' écrasera la liste de fichiers précédente, je convertis donc d'abord le fichier sélectionné en base64 en tant qu'image d'aperçu, similaire à celle-ci, vous pouvez l'ajouter plusieurs fois

Mais comment ajouter plusieurs images d'aperçu à l'objet formdata lors du téléchargement ? Le paramètre accepté par l'arrière-plan est un tableau de fichiers MultipartFile[].

Voici ce que j'ai mal fait :


function getImgFiles() {
    var imgFiles = [];
    var imgs = $('img');
    $.each(imgs, function (i, item) {
        var blob = dataURItoBlob(item.src);
        imgFiles.push(new  File([blob], item.id));
    });

    return imgFiles;
}

/**
 * base64->blob
 * @param dataURI
 * @returns {Blob}
 */
function dataURItoBlob(dataURI) {
    var byteString = atob(dataURI.split(',')[1]);
    var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
    var ab = new ArrayBuffer(byteString.length);
    var ia = new Uint8Array(ab);
    for (var i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
    }
    return new Blob([ab], {type: mimeString});
}

var formData = new  FormData($('form').get(0));
formData.append('files', getImgFiles());

//然后使用ajax上传,但是后台没有接受到 files 参数。
PHP中文网
PHP中文网

认证0级讲师

répondre à tous(3)
迷茫

Vous pouvez avoir les méthodes suivantes :

$.each(getImgFiles(), function(i, file){
    formData.append('files', file);
});
$.each(getImgFiles(), function(i, file){
    formData.append('files[]', file);
});
$.each(getImgFiles(), function(i, file){
    formData.append('files_' + i, file);
});

Vous devriez pouvoir recevoir des fichiers en arrière-plan. La méthode spécifique à utiliser dépend du langage et du framework utilisés dans votre backend.

En ce qui concerne PHP, j'aime le dernier, qui peut utiliser $_FILES pour obtenir tous les fichiers/images en un seul parcours.

phpcn_u1582

Chaque fois que vous transférez un fichier hors base64, vous devez également créer un blob et l'ajouter à votre structure formData.

De plus, je me souviens que la saisie peut prendre en charge plusieurs sélections, n'est-ce pas ?

typecho

Vous devez d'abordF12networkvérifier s'il y a des paramètres dans cette demande

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!