Téléchargement de fichiers et téléchargement de fichiers basés sur ant-design-vue

avant-propos

Les jours de typhon à la maison examinent une réalisation de fonction de téléchargement et de téléchargement de fichier!

Télécharger le document

Cliquez sur un bouton pour télécharger un fichier, un scénario d'entreprise qui se produit fréquemment.
Nous devons définir le type de réponse dans l'en-tête de réponse pour indiquer au backend le type de données dont nous avons besoin

export const getCartTemplate = () =>
  defHttp.get({
    
    
    url: Api.api_get_cart_template,
    // 确保获取类型正确的数据
    responseType: 'blob',
    headers: {
    
    
      ignoreCancelToken: true,
    },
  });

Après avoir obtenu les données, créez une balise pour un clic automatique :

// 这里的res即返回数据
 const saveFile = (res) => {
    
    
       let blob = new Blob([res], {
    
    
         // 为了保证浏览器能正确的解析Blob URL返回的文件类型,需要在创建Blob对象时指定相应的type  这里指定为.xlsx
         type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8',
       });
       // 创建一个临时的url指向blob对象
       let url = window.URL.createObjectURL(blob);
       let a = document.createElement('a');
       a.href = url;
       // 自定义文件名
       a.download = fileName.value;
       a.click();
       // 释放这个临时的对象url
       window.URL.revokeObjectURL(url);
     };

À propos de l'objet Blob :
Blob(blobParts[, options])

  • blobParts : type de tableau, chaque élément du tableau est connecté pour former les données de l'objet Blob, et chaque élément du tableau peut être ArrayBuffer (tampon de données binaires), ArrayBufferView, Blob, DOMString. ou un mélange d'autres objets similaires.
  • options : Facultatif, de type format dictionnaire, vous pouvez spécifier les deux attributs suivants :
    type, la valeur par défaut est "", qui représente le type MIME du contenu du tableau qui sera mis dans le blob.
    endings, la valeur par défaut est "transparent", qui est utilisée pour spécifier comment la chaîne contenant le terminateur de ligne \n est écrite. Il s'agit de l'une des deux valeurs suivantes : "native", indiquant que le caractère de fin de ligne sera remplacé par un caractère de saut de ligne adapté au système de fichiers du système d'exploitation hôte ; "transparent", indiquant que le caractère de fin enregistré dans le blob sera maintenu inchangé.

tapez la référence du type :

Poste Type MIME
.doc application/msword
.point application/msword
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.dotx application/vnd.openxmlformats-officedocument.wordprocessingml.template
.docm application/vnd.ms-word.document.macroEnabled.12
.dotm application/vnd.ms-word.template.macroEnabled.12
.xls application/vnd.ms-excel
.xlt application/vnd.ms-excel
.xla application/vnd.ms-excel
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xltx application/vnd.openxmlformats-officedocument.spreadsheetml.template
.xlsm application/vnd.ms-excel.sheet.macroEnabled.12
.xltm application/vnd.ms-excel.template.macroEnabled.12
.xlam application/vnd.ms-excel.addin.macroEnabled.12
.xlsb application/vnd.ms-excel.sheet.binary.macroEnabled.12
.ppt application/vnd.ms-powerpoint
.pot application/vnd.ms-powerpoint
.pps application/vnd.ms-powerpoint
.ppa application/vnd.ms-powerpoint
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
.potx application/vnd.openxmlformats-officedocument.presentationml.template
.ppsx application/vnd.openxmlformats-officedocument.presentationml.slideshow
.ppam application/vnd.ms-powerpoint.addin.macroEnabled.12
.pptm application/vnd.ms-powerpoint.presentation.macroEnabled.12
.potm application/vnd.ms-powerpoint.presentation.macroEnabled.12
.ppsm application/vnd.ms-powerpoint.slideshow.macroEnabled.12

Téléchargement de fichier (basé sur ant-design-vue)

Téléchargez le fichier après avoir cliqué sur le bouton, portez le mot de passe du fichier, le mot de passe peut être vide !
Rubrique modèle :

<a-upload
        name="file"
        accept=".xls,.xlsx"
        :file-list="fileList"
        :showUploadList="true"
        :withCredentials="true"
        :headers="headers"
        :before-upload="beforeUpload"
        :disabled="loading"
        :remove="handleRemove"
      >
        <a-button>
          <SvgIcon name="upload" v-show="!loading" />
          {
   
   { title }}
        </a-button>
 </a-upload>

En fait, il s'agit d'un téléchargement manuel. Il y a un exemple dans le document antd : ant-design-vue upload component .
La description simple est que deux paramètres doivent être ajoutés sur la base du téléchargement automatique :

paramètre illustrer
avant le téléchargement Le crochet avant de télécharger le fichier, le paramètre est le fichier téléchargé, s'il retourne faux, le téléchargement s'arrêtera. Il prend en charge le renvoi d'un objet Promise. Lorsque l'objet Promise est rejeté, le téléchargement s'arrête et lorsqu'il est résolu, il démarre le téléchargement (si la résolution passe dans un objet File ou Blob, alors la résolution passe dans l'objet). Remarque : IE9 ne prend pas en charge cette méthode. (fichier, liste de fichiers) =>boolean |Promise
liste de fichiers Liste des fichiers téléchargés (contrôlés) objet[ ]

Stockez le fichier téléchargé par l'utilisateur dans beforeLoad, qui n'a pas encore été téléchargé :

      // 上传前
      const beforeUpload = (file: FileItem) => {
    
    
        console.log(file, ' file ');
        fileList.value = [file];
        return false;
      };

Lorsque le téléchargement est cliqué :

	  const loading = ref(false);
      // 上传
      const handleUpload = async () => {
    
    
        if (!fileList.value.length) {
    
    
          message.error('Please upload first');
          return;
        }
        // 使用formData格式传递参数
        const fd = new FormData();
        fd.append('file', fileList.value[0]);
        fd.append('pwd', pwd.value);

        loading.value = true;

        try {
    
    
          // 发送请求
          const res = await importCart(fd);
          if (res.success) {
    
    
            // success
          } else {
    
    
         	// fail
        } catch (err) {
    
    
          console.log(err);
        } finally {
    
    
          loading.value = false;
        }
      };

Lorsqu'il était passé d'automatique à manuel auparavant, il imitait le paramètre de type de contenu de antd, et après l'avoir supprimé, il s'est avéré qu'il n'avait aucun effet :

export const importCart = (params) =>
  defHttp.post({
    
    
    url: Api.api_import_cart,
    params,
    // 使用antd自动上传时的 response header
    'Content-Type': 'application/octet-stream',
    headers: {
    
    
      ignoreCancelToken: true,
       // 使用antd自动上传时的 request header
      'Content-Type': 'multipart/form-data',
    },
  });

c'est tout!

Je suppose que tu aimes

Origine blog.csdn.net/weixin_54858833/article/details/120263071
conseillé
Classement