关于前后端分离文件上传的些许问题

房东的猫 提交于 2019-12-03 11:17:06
1.后端代码,把文件写成流文件
@GetMapping("/{voiceId}/download")public ResponseEntity download(@PathVariable Long voiceId, HttpServletRequest request, HttpServletResponse response) throws IOException, DecoderException {Voice voice = voiceService.getVoice(voiceId);String path = String.format("/%s/%s/%s/%s", main, voice.getAccountId(), voice.getVoiceId(), voice.getVoiceName());FileSystemResource file = new FileSystemResource(path);HttpHeaders headers = new HttpHeaders();headers.add("Cache-Control", "no-cache, no-store, must-revalidate");headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getFilename()));headers.add("Pragma", "no-cache");headers.add("Expires", "0");return ResponseEntity        .ok()        .headers(headers)        .contentLength(file.contentLength())        .contentType(MediaType.parseMediaType("application/octet-stream"))        .body(new InputStreamResource(file.getInputStream()));}2.前端使用。2.1下载使用
<a :href="handleDownload(record)">{{$t('common.download')}}</a>
handleDownload: function (record) {
  return window.url + "/api/tenant/voices/" + record.voiceId + "/download";
}
 
2.2 播放使用
<audio style="width: 100%;" autoplay="autoplay" controls :src="playUrl()">
            </audio>
playUrl: function () {
    return window.url + "/api/tenant/voices/" + this.voice.voiceId + "/download";
}
 
二者都是用的同一接口,都是对流的操作。
 
3.关于excel文件的生成下载
@GetMapping("/download")public void download(BillItemQueryDto billItemQueryDto, HttpServletRequest request, HttpServletResponse response) throws IOException {    List<BillItemDetailDto> list = billItemService.findBillItem(billItemQueryDto);    Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), BillItemDetailDto.class, list);    OutputStream outStream = response.getOutputStream();    response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);    workbook.write(outStream);    outStream.close();}此处关键是BillItemDetailDto的属性标注。
@Excel(name = "企业账户", orderNum = "2")private String accountCode;@Excel(name = "产品名称", orderNum = "4")private String productName;@Excel(name = "企业名称", orderNum = "3")private String vendorName;@Excel(name = "规格名称", orderNum = "5")private String editionName;此处使用easy-poi。通过注解省去逐行写row、call的过程。适用于简单显示表格内容。使用mvn如下:
<dependency>    <groupId>cn.afterturn</groupId>    <artifactId>easypoi-base</artifactId>    <version>3.0.3</version></dependency><dependency>    <groupId>cn.afterturn</groupId>    <artifactId>easypoi-web</artifactId>    <version>3.0.3</version></dependency><dependency>    <groupId>cn.afterturn</groupId>    <artifactId>easypoi-annotation</artifactId>    <version>3.0.3</version></dependency>3.1 使用Blob接收文件并下载。
  billApi.downloadFile(this.filter).then(res => {
    const content = res
    const blob = new Blob([content])
    const fileName = '导出信息.xlsx'
    if ('download' in document.createElement('a')) { // 非IE下载
      const elink = document.createElement('a')
      elink.download = fileName
      elink.style.display = 'none'
      elink.href = URL.createObjectURL(blob)
      document.body.appendChild(elink)
      elink.click()
      URL.revokeObjectURL(elink.href// 释放URL 对象
      document.body.removeChild(elink)
    } else { // IE10+下载
       navigator.msSaveBlob(blobfileName)
    }
})。
 
后记:下载的MediaType可以通用application/octet-stream。也可以使用具体的格式对应。
附录一些格式对应。
".*"="application/octet-stream"".001"="application/x-001"".301"="application/x-301"".323"="text/h323"".906"="application/x-906"".907"="drawing/907"".a11"="application/x-a11"".acp"="audio/x-mei-aac"".ai"="application/postscript"".aif"="audio/aiff"".aifc"="audio/aiff"".aiff"="audio/aiff"".anv"="application/x-anv"".asa"="text/asa"".asf"="video/x-ms-asf"".asp"="text/asp"".asx"="video/x-ms-asf"".au"="audio/basic"".avi"="video/avi"".awf"="application/vnd.adobe.workflow"".biz"="text/xml"".bmp"="application/x-bmp"".bot"="application/x-bot"".c4t"="application/x-c4t"".c90"="application/x-c90"".cal"="application/x-cals"".cat"="application/vnd.ms-pki.seccat"".cdf"="application/x-netcdf"".cdr"="application/x-cdr"".cel"="application/x-cel"".cer"="application/x-x509-ca-cert"".cg4"="application/x-g4"".cgm"="application/x-cgm"".cit"="application/x-cit"".class"="java/*"".cml"="text/xml"".cmp"="application/x-cmp"".cmx"="application/x-cmx"".cot"="application/x-cot"".crl"="application/pkix-crl"".crt"="application/x-x509-ca-cert"".csi"="application/x-csi"".css"="text/css"".cut"="application/x-cut"".dbf"="application/x-dbf"".dbm"="application/x-dbm"".dbx"="application/x-dbx"".dcd"="text/xml"".dcx"="application/x-dcx"".der"="application/x-x509-ca-cert"".dgn"="application/x-dgn"".dib"="application/x-dib"".dll"="application/x-msdownload"".doc"="application/msword"".dot"="application/msword"".drw"="application/x-drw"".dtd"="text/xml"".dwf"="Model/vnd.dwf"".dwf"="application/x-dwf"".dwg"="application/x-dwg"".dxb"="application/x-dxb"".dxf"="application/x-dxf"".edn"="application/vnd.adobe.edn"".emf"="application/x-emf"".eml"="message/rfc822"".ent"="text/xml"".epi"="application/x-epi"".eps"="application/x-ps"".eps"="application/postscript"".etd"="application/x-ebx"".exe"="application/x-msdownload"".fax"="image/fax"".fdf"="application/vnd.fdf"".fif"="application/fractals"".fo"="text/xml"".frm"="application/x-frm"".g4"="application/x-g4"".gbr"="application/x-gbr"".gcd"="application/x-gcd"".gif"="image/gif"".gl2"="application/x-gl2"".gp4"="application/x-gp4"".hgl"="application/x-hgl"".hmr"="application/x-hmr"".hpg"="application/x-hpgl"".hpl"="application/x-hpl"".hqx"="application/mac-binhex40"".hrf"="application/x-hrf"".hta"="application/hta"".htc"="text/x-component"".htm"="text/html"".html"="text/html"".htt"="text/webviewhtml"".htx"="text/html"".icb"="application/x-icb"".ico"="image/x-icon"".ico"="application/x-ico"".iff"="application/x-iff"".ig4"="application/x-g4"".igs"="application/x-igs"".iii"="application/x-iphone"".img"="application/x-img"".ins"="application/x-internet-signup"".isp"="application/x-internet-signup"".IVF"="video/x-ivf"".java"="java/*"".jfif"="image/jpeg"".jpe"="image/jpeg"".jpe"="application/x-jpe"".jpeg"="image/jpeg"".jpg"="image/jpeg"".jpg"="application/x-jpg"".js"="application/x-javascript"".jsp"="text/html"".la1"="audio/x-liquid-file"".lar"="application/x-laplayer-reg"".latex"="application/x-latex"".lavs"="audio/x-liquid-secure"".lbm"="application/x-lbm"".lmsff"="audio/x-la-lms"".ls"="application/x-javascript"".ltr"="application/x-ltr"".m1v"="video/x-mpeg"".m2v"="video/x-mpeg"".m3u"="audio/mpegurl"".m4e"="video/mpeg4"".mac"="application/x-mac"".man"="application/x-troff-man"".math"="text/xml"".mdb"="application/msaccess"".mdb"="application/x-mdb"".mfp"="application/x-shockwave-flash"".mht"="message/rfc822"".mhtml"="message/rfc822"".mi"="application/x-mi"".mid"="audio/mid"".midi"="audio/mid"".mil"="application/x-mil"".mml"="text/xml"".mnd"="audio/x-musicnet-download"".mns"="audio/x-musicnet-stream"".mocha"="application/x-javascript"".movie"="video/x-sgi-movie"".mp1"="audio/mp1"".mp2"="audio/mp2"".mp2v"="video/mpeg"".mp3"="audio/mp3"".mp4"="video/mpeg4"".mpa"="video/x-mpg"".mpd"="application/vnd.ms-project"".mpe"="video/x-mpeg"".mpeg"="video/mpg"".mpg"="video/mpg"".mpga"="audio/rn-mpeg"".mpp"="application/vnd.ms-project"".mps"="video/x-mpeg"".mpt"="application/vnd.ms-project"".mpv"="video/mpg"".mpv2"="video/mpeg"".mpw"="application/vnd.ms-project"".mpx"="application/vnd.ms-project"".mtx"="text/xml"".mxp"="application/x-mmxp"".net"="image/pnetvue"".nrf"="application/x-nrf"".nws"="message/rfc822"".odc"="text/x-ms-odc"".out"="application/x-out"".p10"="application/pkcs10"".p12"="application/x-pkcs12"".p7b"="application/x-pkcs7-certificates"".p7c"="application/pkcs7-mime"".p7m"="application/pkcs7-mime"".p7r"="application/x-pkcs7-certreqresp"".p7s"="application/pkcs7-signature"".pc5"="application/x-pc5"".pci"="application/x-pci"".pcl"="application/x-pcl"".pcx"="application/x-pcx"".pdf"="application/pdf"".pdf"="application/pdf"".pdx"="application/vnd.adobe.pdx"".pfx"="application/x-pkcs12"".pgl"="application/x-pgl"".pic"="application/x-pic"".pko"="application/vnd.ms-pki.pko"".pl"="application/x-perl"".plg"="text/html"".pls"="audio/scpls"".plt"="application/x-plt"".png"="image/png"".png"="application/x-png"".pot"="application/vnd.ms-powerpoint"".ppa"="application/vnd.ms-powerpoint"".ppm"="application/x-ppm"".pps"="application/vnd.ms-powerpoint"".ppt"="application/vnd.ms-powerpoint"".ppt"="application/x-ppt"".pr"="application/x-pr"".prf"="application/pics-rules"".prn"="application/x-prn"".prt"="application/x-prt"".ps"="application/x-ps"".ps"="application/postscript"".ptn"="application/x-ptn"".pwz"="application/vnd.ms-powerpoint"".r3t"="text/vnd.rn-realtext3d"".ra"="audio/vnd.rn-realaudio"".ram"="audio/x-pn-realaudio"".ras"="application/x-ras"".rat"="application/rat-file"".rdf"="text/xml"".rec"="application/vnd.rn-recording"".red"="application/x-red"".rgb"="application/x-rgb"".rjs"="application/vnd.rn-realsystem-rjs"".rjt"="application/vnd.rn-realsystem-rjt"".rlc"="application/x-rlc"".rle"="application/x-rle"".rm"="application/vnd.rn-realmedia"".rmf"="application/vnd.adobe.rmf"".rmi"="audio/mid"".rmj"="application/vnd.rn-realsystem-rmj"".rmm"="audio/x-pn-realaudio"".rmp"="application/vnd.rn-rn_music_package"".rms"="application/vnd.rn-realmedia-secure"".rmvb"="application/vnd.rn-realmedia-vbr"".rmx"="application/vnd.rn-realsystem-rmx"".rnx"="application/vnd.rn-realplayer"".rp"="image/vnd.rn-realpix"".rpm"="audio/x-pn-realaudio-plugin"".rsml"="application/vnd.rn-rsml"".rt"="text/vnd.rn-realtext"".rtf"="application/msword"".rtf"="application/x-rtf"".rv"="video/vnd.rn-realvideo"".sam"="application/x-sam"".sat"="application/x-sat"".sdp"="application/sdp"".sdw"="application/x-sdw"".sit"="application/x-stuffit"".slb"="application/x-slb"".sld"="application/x-sld"".slk"="drawing/x-slk"".smi"="application/smil"".smil"="application/smil"".smk"="application/x-smk"".snd"="audio/basic"".sol"="text/plain"".sor"="text/plain"".spc"="application/x-pkcs7-certificates"".spl"="application/futuresplash"".spp"="text/xml"".ssm"="application/streamingmedia"".sst"="application/vnd.ms-pki.certstore"".stl"="application/vnd.ms-pki.stl"".stm"="text/html"".sty"="application/x-sty"".svg"="text/xml"".swf"="application/x-shockwave-flash"".tdf"="application/x-tdf"".tg4"="application/x-tg4"".tga"="application/x-tga"".tif"="image/tiff"".tif"="application/x-tif"".tiff"="image/tiff"".tld"="text/xml"".top"="drawing/x-top"".torrent"="application/x-bittorrent"".tsd"="text/xml"".txt"="text/plain"".uin"="application/x-icq"".uls"="text/iuls"".vcf"="text/x-vcard"".vda"="application/x-vda"".vdx"="application/vnd.visio"".vml"="text/xml"".vpg"="application/x-vpeg005"".vsd"="application/vnd.visio"".vsd"="application/x-vsd"".vss"="application/vnd.visio"".vst"="application/vnd.visio"".vst"="application/x-vst"".vsw"="application/vnd.visio"".vsx"="application/vnd.visio"".vtx"="application/vnd.visio"".vxml"="text/xml"".wav"="audio/wav"".wax"="audio/x-ms-wax"".wb1"="application/x-wb1"".wb2"="application/x-wb2"".wb3"="application/x-wb3"".wbmp"="image/vnd.wap.wbmp"".wiz"="application/msword"".wk3"="application/x-wk3"".wk4"="application/x-wk4"".wkq"="application/x-wkq"".wks"="application/x-wks"".wm"="video/x-ms-wm"".wma"="audio/x-ms-wma"".wmd"="application/x-ms-wmd"".wmf"="application/x-wmf"".wml"="text/vnd.wap.wml"".wmv"="video/x-ms-wmv"".wmx"="video/x-ms-wmx"".wmz"="application/x-ms-wmz"".wp6"="application/x-wp6"".wpd"="application/x-wpd"".wpg"="application/x-wpg"".wpl"="application/vnd.ms-wpl"".wq1"="application/x-wq1"".wr1"="application/x-wr1"".wri"="application/x-wri"".wrk"="application/x-wrk"".ws"="application/x-ws"".ws2"="application/x-ws"".wsc"="text/scriptlet"".wsdl"="text/xml"".wvx"="video/x-ms-wvx"".xdp"="application/vnd.adobe.xdp"".xdr"="text/xml"".xfd"="application/vnd.adobe.xfd"".xfdf"="application/vnd.adobe.xfdf"".xhtml"="text/html"".xls"="application/vnd.ms-excel"".xls"="application/x-xls"".xlw"="application/x-xlw"".xml"="text/xml"".xpl"="audio/scpls"".xq"="text/xml"".xql"="text/xml"".xquery"="text/xml"".xsd"="text/xml"".xsl"="text/xml"".xslt"="text/xml"".xwd"="application/x-xwd"".x_b"="application/x-x_b"".x_t"="application/x-x_t"


 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!