摘要:在這篇博客中,我們將展示如何在中實(shí)現(xiàn)文件的下載功能。本次建立的項(xiàng)目的主要功能為文件下載,而且這也是唯一功能,當(dāng)然,作為例子,要盡可能簡(jiǎn)單,所以,功能簡(jiǎn)化為只下載盤目錄下的某一個(gè)文件。
??在這篇博客中,我們將展示如何在Spring Boot中實(shí)現(xiàn)文件的下載功能。
??還是遵循筆者寫博客的一貫風(fēng)格,簡(jiǎn)單又不失詳細(xì),實(shí)用又能讓你學(xué)會(huì)。
??本次建立的Spring Boot項(xiàng)目的主要功能為文件下載,而且這也是唯一功能,當(dāng)然,作為例子,要盡可能簡(jiǎn)單,所以,功能簡(jiǎn)化為只下載E盤music_eg目錄下的某一個(gè)文件。
??該Spring Boot項(xiàng)目的名稱為file_download,其具體結(jié)構(gòu)如下:
build.gradle文件的代碼如下:
buildscript { ext { springBootVersion = "2.0.3.RELEASE" } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: "java" apply plugin: "eclipse" apply plugin: "org.springframework.boot" apply plugin: "io.spring.dependency-management" group = "com.example" version = "0.0.1-SNAPSHOT" sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile("org.springframework.boot:spring-boot-starter-web") testCompile("org.springframework.boot:spring-boot-starter-test") }
我們只需要?jiǎng)?chuàng)建一個(gè)控制器(Controler)文件,即Controller目錄下的File_Download.java,其完整目錄如下:
package com.example.file_download.Controller; import java.io.*; import java.net.URLEncoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class File_Download { //實(shí)現(xiàn)Spring Boot 的文件下載功能,映射網(wǎng)址為/download @RequestMapping("/download") public String downloadFile(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { // 獲取指定目錄下的第一個(gè)文件 File scFileDir = new File("E://music_eg"); File TrxFiles[] = scFileDir.listFiles(); System.out.println(TrxFiles[0]); String fileName = TrxFiles[0].getName(); //下載的文件名 // 如果文件名不為空,則進(jìn)行下載 if (fileName != null) { //設(shè)置文件路徑 String realPath = "E://music_eg/"; File file = new File(realPath, fileName); // 如果文件名存在,則進(jìn)行下載 if (file.exists()) { // 配置文件下載 response.setHeader("content-type", "application/octet-stream"); response.setContentType("application/octet-stream"); // 下載文件能正常顯示中文 response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); // 實(shí)現(xiàn)文件下載 byte[] buffer = new byte[1024]; FileInputStream fis = null; BufferedInputStream bis = null; try { fis = new FileInputStream(file); bis = new BufferedInputStream(fis); OutputStream os = response.getOutputStream(); int i = bis.read(buffer); while (i != -1) { os.write(buffer, 0, i); i = bis.read(buffer); } System.out.println("Download the song successfully!"); } catch (Exception e) { System.out.println("Download the song failed!"); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } } return null; } }
這樣我們就完成了Spring Boot的文件下載功能。什么?這樣就搞定了?是的,就是這么簡(jiǎn)單,因?yàn)橹粚?shí)現(xiàn)了文件下載功能。具體的代碼留給讀者好好分析哦~~
??寫完代碼并不是我們的最終目的,我們還差最后一步,那就是測(cè)試!測(cè)試,真的相當(dāng)重要啊~
??運(yùn)行Spring Boot項(xiàng)目后,在瀏覽器中輸入:http://localhost:8080/download , 你會(huì)發(fā)現(xiàn)什么?那就是你的瀏覽器已經(jīng)開始下載E盤music_eg目錄下的某一個(gè)文件啦(前提是E盤中存在music_eg目錄,當(dāng)然里面還得有文件,本例僅作為測(cè)試),如下圖所示:
??我們?cè)偃ゲ榭碋盤music_eg目錄,如下:
??So, 用Spring Boot實(shí)現(xiàn)文件下載功能搞定!歡迎大家交流哦~
注意:本人現(xiàn)已開通兩個(gè)微信公眾號(hào): 因?yàn)镻ython(微信號(hào)為:python_math)以及輕松學(xué)會(huì)Python爬蟲(微信號(hào)為:easy_web_scrape), 歡迎大家關(guān)注哦~~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/71503.html
摘要:編寫一個(gè)接口創(chuàng)建命名為根據(jù)實(shí)際情況修改創(chuàng)建類,內(nèi)容如下啟動(dòng)主程序,使用等工具發(fā)起請(qǐng)求,可以看到頁(yè)面返回編寫單元測(cè)試用例打開的下的測(cè)試入口類。 簡(jiǎn)介 在您第1次接觸和學(xué)習(xí)Spring框架的時(shí)候,是否因?yàn)槠浞彪s的配置而退卻了?在你第n次使用Spring框架的時(shí)候,是否覺得一堆反復(fù)黏貼的配置有一些厭煩?那么您就不妨來試試使用Spring Boot來讓你更易上手,更簡(jiǎn)單快捷地構(gòu)建Spring應(yīng)...
摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡(jiǎn)介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號(hào)作者架構(gòu)師奮斗者掃描主頁(yè)左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊(duì)的人太少,簡(jiǎn)而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...
摘要:響應(yīng)式編程是基于異步和事件驅(qū)動(dòng)的非阻塞程序,只是垂直通過在內(nèi)啟動(dòng)少量線程擴(kuò)展,而不是水平通過集群擴(kuò)展。三特性常用的生產(chǎn)的特性如下響應(yīng)式編程模型適用性內(nèi)嵌容器組件還有對(duì)日志消息測(cè)試及擴(kuò)展等支持。 摘要: 原創(chuàng)出處 https://www.bysocket.com 「公眾號(hào):泥瓦匠BYSocket 」歡迎關(guān)注和轉(zhuǎn)載,保留摘要,謝謝! 02:WebFlux 快速入門實(shí)踐 文章工程: JDK...
摘要:歷史文章如何在安裝最新版安裝安裝最新版的入門教程教程內(nèi)容備注本系列開發(fā)工具均為構(gòu)建項(xiàng)目,選擇后面發(fā)現(xiàn)其實(shí)沒有用到三個(gè)基本的依賴。 本博客 貓叔的博客,轉(zhuǎn)載請(qǐng)申明出處本系列教程為HMStrange項(xiàng)目附帶。 歷史文章 如何在VMware12安裝Centos7.6最新版 Centos7.6安裝Java8 Centos7.6安裝MySQL+Redis(最新版) SpringBoot+My...
閱讀 2742·2021-09-02 15:11
閱讀 914·2019-08-26 18:18
閱讀 1872·2019-08-26 11:57
閱讀 3325·2019-08-23 16:59
閱讀 2003·2019-08-23 16:51
閱讀 2312·2019-08-23 16:11
閱讀 3131·2019-08-23 14:58
閱讀 1113·2019-08-23 11:34