国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot實(shí)現(xiàn)文件下載的多種方式

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot實(shí)現(xiàn)文件下載的多種方式。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 將文件以流的形式一次性讀取到內(nèi)存,通過響應(yīng)輸出流輸出到前端

/**
* @param path 想要下載的文件的路徑
* @param response
* @功能描述 下載文件:
*/
@RequestMapping("/download")
public void download(String path, HttpServletResponse response) {
try {
// path是指想要下載的文件的路徑
File file = new File(path);
log.info(file.getPath());
// 獲取文件名
String filename = file.getName();
// 獲取文件后綴名
String ext = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();
log.info("文件后綴名:" + ext);
 
// 將文件寫入輸入流
FileInputStream fileInputStream = new FileInputStream(file);
InputStream fis = new BufferedInputStream(fileInputStream);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
 
// 清空response
response.reset();
// 設(shè)置response的Header
response.setCharacterEncoding("UTF-8");
//Content-Disposition的作用:告知瀏覽器以何種方式顯示響應(yīng)返回的文件,用瀏覽器打開還是以附件的形式下載到本地保存
//attachment表示以附件方式下載 inline表示在線打開 "Content-Disposition: inline; filename=文件名.mp3"
// filename表示文件的默認(rèn)名稱,因?yàn)榫W(wǎng)絡(luò)傳輸只支持URL編碼的相關(guān)支付,因此需要將文件名URL編碼后進(jìn)行傳輸,前端收到后需要反編碼才能獲取到真正的名稱
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
// 告知瀏覽器文件的大小
response.addHeader("Content-Length", "" + file.length());
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
outputStream.write(buffer);
outputStream.flush();
} catch (IOException ex) {
ex.printStackTrace();
	}
} 

1.1 下載文件

@RequestMapping("getFile")
@ResponseBody
public void getFile(HttpServletResponse response) throws Exception{
    File readFile = new File("/home/ssx/Music/CloudMusic/夜曲-周杰倫.flac");
    //字節(jié)流-用于讀文件  這里只是demo用的非緩沖流。實(shí)際項(xiàng)目可以用BufferedInputStream。 此功能是讀取圖片,所以用的字節(jié)流。如果是文本的話可以用字符流效率高,具體類看下面注釋
	//        BufferedReader bufferedReader = new BufferedReader(new FileReader(readFile));//字符流
    FileInputStream fileInputStream = new FileInputStream(readFile);//字節(jié)流
    //設(shè)置文件下載方式
    response.setHeader("content-disposition","attachment;filename="+ URLEncoder.encode("夜曲-周杰倫.flac","utf-8"));
    //獲取servlet響應(yīng)輸出字節(jié)流
	//        PrintWriter writer = response.getWriter();//字符流
    ServletOutputStream outputStream = response.getOutputStream(); //字節(jié)流

    //流數(shù)據(jù)交換,每次交換10k數(shù)據(jù)大小 (1024k = 1m)
    byte[] bytes = new byte[1024*10];
    int read;
    do {
        read = fileInputStream.read(bytes);
        outputStream.write(bytes,0,read);
    }while (-1 != read);

    //關(guān)閉資源
    IOUtils.closeQuietly(fileInputStream);
    IOUtils.closeQuietly(outputStream);
}

2. 將輸入流中的數(shù)據(jù)循環(huán)寫入到響應(yīng)輸出流中,而不是一次性讀取到內(nèi)存,通過響應(yīng)輸出流輸出到前端

/**
* @param path 指想要下載的文件的路徑
* @param response
* @功能描述 下載文件:將輸入流中的數(shù)據(jù)循環(huán)寫入到響應(yīng)輸出流中,而不是一次性讀取到內(nèi)存
*/
@RequestMapping("/downloadLocal")
public void downloadLocal(String path, HttpServletResponse response) throws IOException {
// 讀到流中
InputStream inputStream = new FileInputStream(path);// 文件的存放路徑
response.reset();
response.setContentType("application/octet-stream");
String filename = new File(path).getName();
response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));
ServletOutputStream outputStream = response.getOutputStream();
byte[] b = new byte[1024];
int len;
//從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲在緩沖區(qū)字節(jié)數(shù)組中,讀到末尾返回-1
while ((len = inputStream.read(b)) > 0) {
outputStream.write(b, 0, len);
}
inputStream.close();
} 

3. 下載網(wǎng)絡(luò)文件到本地

/**
* @param path 下載后的文件路徑和名稱
* @param netAddress 文件所在網(wǎng)絡(luò)地址
* @功能描述 網(wǎng)絡(luò)文件下載到服務(wù)器本地
*/
@RequestMapping("/netDownloadLocal")
public void downloadNet(String netAddress, String path) throws IOException {
URL url = new URL(netAddress);
URLConnection conn = url.openConnection();
InputStream inputStream = conn.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream(path);
 
int bytesum = 0;
int byteread;
byte[] buffer = new byte[1024];
while ((byteread = inputStream.read(buffer)) != -1) {
bytesum += byteread;
System.out.println(bytesum);
fileOutputStream.write(buffer, 0, byteread);
}
fileOutputStream.close();
} 

4. 網(wǎng)絡(luò)文件獲取到服務(wù)器后,經(jīng)服務(wù)器處理后響應(yīng)給前端

/**
* @param netAddress
* @param filename
* @param isOnLine
* @param response
* @功能描述 網(wǎng)絡(luò)文件獲取到服務(wù)器后,經(jīng)服務(wù)器處理后響應(yīng)給前端
*/
@RequestMapping("/netDownLoadNet")
public void netDownLoadNet(String netAddress, String filename, boolean isOnLine, HttpServletResponse response) throws Exception {
 
URL url = new URL(netAddress);
URLConnection conn = url.openConnection();
InputStream inputStream = conn.getInputStream();
 
response.reset();
response.setContentType(conn.getContentType());
if (isOnLine) {
// 在線打開方式 文件名應(yīng)該編碼成UTF-8
response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(filename, "UTF-8"));
} else {
//純下載方式 文件名應(yīng)該編碼成UTF-8
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));
}
 
byte[] buffer = new byte[1024];
int len;
OutputStream outputStream = response.getOutputStream();
while ((len = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
}
inputStream.close();
} 

文章來源地址http://www.zghlxwxcb.cn/news/detail-738900.html

到了這里,關(guān)于SpringBoot實(shí)現(xiàn)文件下載的多種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot整合Minio實(shí)現(xiàn)文件上傳、下載

    SpringBoot整合Minio實(shí)現(xiàn)文件上傳、下載

    SpringBoot整合Minio實(shí)現(xiàn)文件上傳、下載: 1,介紹高性能分布式存儲文件服務(wù)Minio:Minio是 基于Go語言編寫的對象存儲服務(wù) , 適合于存儲大容量非結(jié)構(gòu)化的數(shù)據(jù) ,例如 圖片、音頻、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等 ,而一個(gè)對象文件可以是任意大小,從幾kb到最

    2024年02月06日
    瀏覽(34)
  • SpringBoot整合Hutool實(shí)現(xiàn)文件上傳下載

    我相信我們在日常開發(fā)中,難免會遇到對各種媒體文件的操作,由于業(yè)務(wù)需求的不同對文件操作的代碼實(shí)現(xiàn)也大不相同 maven配置 文件類 文件接口? 配置靜態(tài)資源映射

    2024年02月02日
    瀏覽(27)
  • SpringBoot+MinIO 實(shí)現(xiàn)文件上傳、讀取、下載、刪除

    一、 MinIO 二、 MinIO安裝和啟動 三、 pom.xml 四、 applicatin.properties(配置文件) 五、 編寫Java業(yè)務(wù)類

    2024年02月09日
    瀏覽(44)
  • springboot+微信小程序?qū)崿F(xiàn)文件上傳下載(預(yù)覽)pdf文件

    實(shí)現(xiàn)思路: 選擇文件 wx.chooseMessageFile ,官方文檔: https://developers.weixin.qq.com/miniprogram/d e v/api/media/image/wx.chooseMessageFile.html 上傳文件 `wx,uploadFile` , 官方文檔:https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/wx.uploadFile.html 查看所有上傳的pdf文件,顯示在頁面上 點(diǎn)擊pdf文件

    2024年02月08日
    瀏覽(96)
  • springboot 使用ExcelUtil實(shí)現(xiàn)文件導(dǎo)入、導(dǎo)出、模板下載

    1.1、使用Swagger 注解,表示該接口方法用于 Excel 模板下載操作 1.2、定義接口方法,接受一個(gè) HttpServletResponse 對象作為參數(shù),用于響應(yīng)生成的 Excel 文件 1.3、創(chuàng)建了一個(gè) ExcelUtil 對象,并指定了數(shù)據(jù)模型類,(ExcelUtil 是一個(gè)自定義的工具類,用于處理 Excel 文件的導(dǎo)入和導(dǎo)出操作

    2024年02月09日
    瀏覽(56)
  • SpringBoot+Vue+Element-ui實(shí)現(xiàn)文件下載

    SpringBoot+Vue+Element-ui實(shí)現(xiàn)文件下載

    目錄 1.后端代碼部分 2.前端代碼部分 3.效果展示 1.后端代碼部分 2.前端代碼部分 注意這里為了方便,省去了用axios作請求,而用href直接跳轉(zhuǎn),相當(dāng)于一次請求訪問 3.效果展示 ? ?下載成功

    2024年02月12日
    瀏覽(31)
  • Springboot + MySQL + html 實(shí)現(xiàn)文件的上傳、存儲、下載、刪除

    Springboot + MySQL + html 實(shí)現(xiàn)文件的上傳、存儲、下載、刪除

    實(shí)現(xiàn)步驟及效果呈現(xiàn)如下: 1.創(chuàng)建數(shù)據(jù)庫表: 表名:file_test 存儲后的數(shù)據(jù): 2.創(chuàng)建數(shù)據(jù)庫表對應(yīng)映射的實(shí)體類: import com.baomidou.mybatisplus.annotation.IdType ; import com.baomidou.mybatisplus.annotation. TableField ; import com.baomidou.mybatisplus.annotation. TableId ; import com.baomidou.mybatisplus.annotation. Tab

    2024年04月29日
    瀏覽(28)
  • SpringBoot實(shí)現(xiàn)文件上傳和下載筆記分享(提供Gitee源碼)

    前言:這邊匯總了一下目前SpringBoot項(xiàng)目當(dāng)中常見文件上傳和下載的功能,一共三種常見的下載方式和一種上傳方式,特此做一個(gè)筆記分享。 目錄 一、pom依賴 二、yml配置文件 三、文件下載

    2024年02月11日
    瀏覽(26)
  • 一張圖帶你學(xué)會入門級別的SpringBoot實(shí)現(xiàn)文件上傳、下載功能

    一張圖帶你學(xué)會入門級別的SpringBoot實(shí)現(xiàn)文件上傳、下載功能

    ?????作者名稱:DaenCode ??作者簡介:啥技術(shù)都喜歡搗鼓搗鼓,喜歡分享技術(shù)、經(jīng)驗(yàn)、生活。 ??人生感悟:嘗盡人生百味,方知世間冷暖。 ??所屬專欄:SpringBoot實(shí)戰(zhàn) 標(biāo)題 一文帶你學(xué)會使用SpringBoot+Avue實(shí)現(xiàn)短信通知功能(含重要文件代碼) 一張思維導(dǎo)圖帶你學(xué)會Springboot創(chuàng)

    2024年02月12日
    瀏覽(118)
  • 基于SpringBoot實(shí)現(xiàn)文件上傳和下載(詳細(xì)講解And附完整代碼)

    目錄 一、基于SpringBoot實(shí)現(xiàn)文件上傳和下載基于理論 二、詳細(xì)操作步驟 文件上傳步驟: 文件下載步驟: 三、前后端交互原理解釋? 四、小結(jié)? 博主介紹:?專注于前后端領(lǐng)域開發(fā)的優(yōu)質(zhì)創(chuàng)作者、秉著互聯(lián)網(wǎng)精神開源貢獻(xiàn)精神,答疑解惑、堅(jiān)持優(yōu)質(zhì)作品共享。本人是掘金/騰訊

    2024年04月11日
    瀏覽(118)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包