vue2 ファイル ストリームが正常にダウンロードされた後、ファイル形式が間違っているため開くことができず、コンテンツが欠落しています。

ここにディレクトリのタイトルを書きます

プロジェクトのシナリオ

バックエンドは、ファイル ストリーミングを使用して、ファイル情報をフロントエンドに送信します。フロントエンドは、対応するストリーム情報を受信し、対応する操作を実行する必要があります。たとえば、画像や PDF を受信すると、プレビュー モードに入り、圧縮パッケージを受信した場合は、ファイルをダウンロードします。バックエンドは、対応するファイルを異なる送信方法で送信し、フロントエンドは、対応する情報を受信して​​操作を実行する必要があります。

問題の説明

写真やPDFの受信時は正常に動作しますが、圧縮ファイルのストリーム受信時は正常にダウンロードできますが、ダウンロード後、ダウンロードしたファイルが破損します。

原因分析

ファイルが異なるため、受信方法も異なります。通常の画像や PDF は毎日のリクエスト メソッドを使用してリクエストできますが、圧縮パッケージのリクエストには受信データ形式の responseType: blob を追加する必要があり、デフォルトのresponseType は "" です。

解決

1. 写真の解決策

export const getFileImg = row => {
    
    
    return request({
    
    
        url: '/api/blade-resource/oss/endpoint/get-file-secret',	//请求路径
        method: 'get',	//请求模式
        params: row,	//请求参数
    })
}

2. ファイルストリームの解決策

export const getFileZip = row => {
    
    
    return request({
    
    
        url: '/api/blade-resource/oss/endpoint/get-file-secret',	//请求路径
        method: 'get',	//请求模式
        params: row,	//请求参数
        responseType: 'blob',
    })
}

3. ファイルのダウンロード

/**
 * 下载压缩包文件
 * @param {blob} fileArrayBuffer 文件流
 * @param {String} filename 文件名称
 * @param {String} fileType 文件格式
 */
export const downloadZip = (fileArrayBuffer, filename, fileType) => {
    
    
  let data = new Blob([fileArrayBuffer], {
    
     type: fileType == 'zip' ? 'application/zip,charset=utf-8' : 'application/x-rar-compressed,charset=utf-8' });
  if (typeof window.chrome !== 'undefined') {
    
    
    // Chrome
    var link = document.createElement('a');
    link.href = window.URL.createObjectURL(data);
    link.download = filename;
    link.click();
    console.log(data);
  } else if (typeof window.navigator.msSaveBlob !== 'undefined') {
    
    
    // IE
    var blob = new Blob([data], {
    
     type: fileType == 'zip' ? 'application/zip' : 'application/x-rar-compressed' });
    window.navigator.msSaveBlob(blob, filename);
  } else {
    
    
    // Firefox
    var file = new File([data], filename, {
    
     type: fileType == 'zip' ? 'application/zip' : 'application/x-rar-compressed' });
    window.open(URL.createObjectURL(file));
  }
}

4.Blobダウンロード時のファイル形式

ファイル形式 タイプタイプ
aac オーディオ/AAC
.abw アプリケーション/x-abiword
.avi ビデオ/x-msvideo
.azw アプリケーション/vnd.amazon.ebook
。置き場 アプリケーション/オクテットストリーム
.bmp 画像/bmp
.bz アプリケーション/x-bzip
.bz2 アプリケーション/x-bzip2
.csh アプリケーション/x-csh
.css テキスト/CSS
.csv テキスト/CSV
.doc アプリケーション/msword
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.eot アプリケーション/vnd.ms-fontobject
.epub アプリケーション/epub+zip
.gif 画像/gif
.htm/.html テキスト/html
.ico 画像/vnd.microsoft.icon
.ics テキスト/カレンダー
.jar アプリケーション/java-アーカイブ
.jpeg/.jpg 画像/jpeg
.js テキスト/JavaScript
.json アプリケーション/json
.jsonld アプリケーション/ld+json
.mid/.midi オーディオ/MIDI オーディオ/X-MIDI
.mjs テキスト/JavaScript
.mp3 オーディオ/mpeg
.mpeg ビデオ/mpeg
.mpkg アプリケーション/vnd.apple.installer+xml
.odp application/vnd.oasis.opendocument.presentation
.ods アプリケーション/vnd.oasis.opendocument.spreadsheet
.odt アプリケーション/vnd.oasis.opendocument.text
.oga オーディオ/OG
.ogv ビデオ/OG
.ogx アプリケーション/OGG
.otf フォント/OTF
.png 画像/png
.pdf 申請書/PDF
.ppt アプリケーション/vnd.ms-powerpoint
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
.rar application/x-rar-compressed
.rtf アプリケーション/rtf
.svg 画像/SVG+XML
.swf アプリケーション/x-shockwave-フラッシュ
。タール アプリケーション/x-tar
.tif/.tiff 画像/TIFF
.ttf フォント/ttf
。TXT テキスト/プレーン
.vsd アプリケーション/vnd.visio
.wav オーディオ/wav
。ウェブ オーディオ/WebM
.webm ビデオ/ウェブサイト
.webp 画像/ウェブサイト
.woff フォント/woff
.woff2 フォント/woff2
.xhtml アプリケーション/xhtml+xml
.xls application/vnd.ms-excel
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xml application/xml 代码对普通用户来说不可读 (RFC 3023, section 3)text/xml 代码对普通用户来说可读 (RFC 3023, section 3)
.xul application/vnd.mozilla.xul+xml
.zip application/zip
.3gp video/3gpp audio/3gpp(若不含视频)
.3g2 video/3gpp2 audio/3gpp2(若不含视频)
.7z application/x-7z-compressed

おすすめ

転載: blog.csdn.net/Salt_NaCl/article/details/129023755