最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)網(wǎng)絡(luò)文件下載以及下載到指定目錄

 更新時間:2024年09月26日 09:01:20   作者:學習游泳的喵  
在Spring框架中,StreamUtils和FileCopyUtils兩個工具類提供了方便的文件下載功能,它們都屬于org.springframework.util包,可以通過簡單的方法調(diào)用實現(xiàn)文件流的復(fù)制和下載,這些工具類支持多種參數(shù)傳遞,涵蓋了文件下載的多種場景

前言

最近項目中有使用到pdf文件下載功能,在使用過程中,發(fā)現(xiàn)spring給我們提供了兩個工具類,已經(jīng)實現(xiàn)了文件下載的功能:

StreamUtils和FileCopyUtils,都是org.springframework.util包下面的類,使用非常方便。

相關(guān)代碼

service實現(xiàn)類

	public InputStream getDownloadInputStreamByUrl(String downloadUrl) {
		if (ObjectUtils.isEmpty(downloadUrl)) {
            throw new RuntimeException("無效參數(shù):fileUrl 不能為空");
        }
		
		InputStream in = null;
		try {
			URL url = new URL(downloadUrl);

			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			// 設(shè)置超時時間為3秒
			conn.setConnectTimeout(3 * 1000);
			// 防止屏蔽程序抓取而返回403錯誤
			conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
			// 得到輸入流
			in = conn.getInputStream();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return in;
	}

Controller類

	@GetMapping("/fileDownload/{filename}")
    public void downloadPdfFile(HttpServletResponse response, @PathVariable(name="filename") String filename) {
        try {
            if (StringUtils.isEmpty(filename)) {
            	throw new RuntimeException("文件名不可為空!");
            }
            //通過文件名查找文件對應(yīng)的url
            String downloadUrl = fileDownloadService.getUrlByFiname(filename);
            if (StringUtils.isEmpty(filename)) {
            	throw new RuntimeException("文件對應(yīng)地址不存在");
            }
            // 此處異常方法中已處理
            InputStream in = fileDownloadService.getDownloadInputStreamByUrl(downloadUrl);
   			// 設(shè)置編碼格式
            response.setCharacterEncoding("UTF-8");
            /* 若要下載指定目錄,以下兩行需注釋,否則會下載兩份,一份到指定目錄,一份到瀏覽器下載目錄 */
            // 設(shè)置下載格式
            response.setHeader("Content-Type", "application/pdf");
            // 注釋這行代碼,可實現(xiàn) 預(yù)覽 功能(只限pdf文件)
            response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
			//下載到指定目錄
			/*
			File file = new File("C:\\tmp");
            if (!file.exists()) {
                //如果文件夾不存在,則創(chuàng)建新的的文件夾
                file.mkdirs();
            }

            File file1 = new File(file.getPath() + File.separator + filename);
           	OutputStream outputStream = new FileOutputStream(file1);
           	FileCopyUtils.copy(in, outputStream);
           	*/

            StreamUtils.copy(in, response.getOutputStream());
        } catch (Exception e) {
        	throw new RuntimeException(e);
        } 
    }

此處通過spring提供的工具類進行文件下載。

工具類中實現(xiàn)方式:

此處也可通過FileCopyUtils.copy(InputStream input, OutputStream output)實現(xiàn)文件下載,其底層也是通過調(diào)用StreamUtils.copy(InputStream in, OutputStream out)方法實現(xiàn)的,不過此方法最后通過finally關(guān)閉了InputStream和OutputStream,邏輯更嚴謹。

這兩個工具類中還有其他的導出方法,可以傳遞其他參數(shù)進去,如圖:

可以看到,這兩個工具類中基本涵蓋了文件下載所需的所有操作。

以上代碼中對異常只是做了簡單的 throw new RuntimeException() 操作,讀者可根據(jù)自己的項目對異常進行處理。

總結(jié)

這些僅為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java由淺入深帶你精通繼承super

    Java由淺入深帶你精通繼承super

    繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為
    2022-03-03
  • SpringBoot中使用Redisson的實現(xiàn)示例

    SpringBoot中使用Redisson的實現(xiàn)示例

    Redission是一個強大的Java庫,用于構(gòu)建和管理分布式系統(tǒng)中的緩存和任務(wù)調(diào)度,本文主要介紹了SpringBoot中使用Redisson的實現(xiàn)示例,感興趣的可以了解一下
    2023-12-12
  • SpringBoot之為何推薦使用構(gòu)造器注入

    SpringBoot之為何推薦使用構(gòu)造器注入

    這篇文章主要介紹了SpringBoot之為何推薦使用構(gòu)造器注入問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • java單元測試JUnit框架原理與用法實例教程

    java單元測試JUnit框架原理與用法實例教程

    這篇文章主要介紹了java單元測試JUnit框架原理與用法,結(jié)合實例形式較為詳細的分析了java單元測試JUnit框架的概念、原理、使用方法及相關(guān)注意事項,需要的朋友可以參考下
    2017-11-11
  • MyBatis-Plus條件構(gòu)造器之condition參數(shù)的使用

    MyBatis-Plus條件構(gòu)造器之condition參數(shù)的使用

    這篇文章主要介紹了MyBatis-Plus條件構(gòu)造器之condition參數(shù)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Idea插件安裝和管理方式

    Idea插件安裝和管理方式

    這篇文章主要介紹了Idea插件安裝和管理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 一文詳解SpringBoot如何創(chuàng)建自定義的自動配置

    一文詳解SpringBoot如何創(chuàng)建自定義的自動配置

    在實際開發(fā)中,僅靠SpringBoot的自動配置是遠遠不夠的,所以這篇文章主要來和大家簡單講講如何在SpringBoot創(chuàng)建自定義的自動配置吧
    2025-07-07
  • Java的垃圾強制回收實例分析

    Java的垃圾強制回收實例分析

    這篇文章主要介紹了Java的垃圾強制回收,結(jié)合實例形式分析了java垃圾強制回收的相關(guān)原理及實現(xiàn)方法,需要的朋友可以參考下
    2019-08-08
  • SpringBoot2.動態(tài)@Value的實現(xiàn)方式

    SpringBoot2.動態(tài)@Value的實現(xiàn)方式

    這篇文章主要介紹了SpringBoot2.動態(tài)@Value的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java使用XSSFWorkbook實現(xiàn)讀寫Excel

    java使用XSSFWorkbook實現(xiàn)讀寫Excel

    這篇文章主要為大家詳細介紹了java如何通過使用XSSFWorkbook實現(xiàn)讀寫Excel功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-04-04

最新評論

霞浦县| 乌审旗| 城口县| 禹城市| 左权县| 万州区| 九龙县| 神农架林区| 都昌县| 安龙县| 嘉禾县| 土默特右旗| 静宁县| 济阳县| 垣曲县| 华宁县| 昭平县| 平阴县| 社会| 乐陵市| 兴安盟| 崇信县| 沽源县| 格尔木市| 建德市| 临夏县| 万载县| 巩留县| 南安市| 白朗县| 泸州市| 红安县| 仙居县| 大连市| 龙海市| 大港区| 新田县| 浙江省| 黔西县| 泰顺县| 慈利县|