使用nio代替傳統流實現文件上傳和下載功能

1.文件下載

/**NIO文件下載工具類* @author olalu*/
public class NioDownloadUtils {/*** @description:* @param file: 要下在文件* @return: void*/public static void downloadDoc(File file,HttpServletResponse response) throws IOException {OutputStream outputStream = response.getOutputStream();String contentType = Files.probeContentType(Paths.get(file.getAbsolutePath()));//設置響應頭response.setHeader("Content-Type", contentType);response.setHeader("Content-Disposition", "attachment;filename="+ new String(file.getName().getBytes("utf-8"),"ISO8859-1"));response.setContentLength((int) file.length());//獲取文件輸入流FileInputStream fileInputStream = new FileInputStream(file);//獲取輸出流通道WritableByteChannel writableByteChannel = Channels.newChannel(outputStream);FileChannel fileChannel = fileInputStream.getChannel();//采用零拷貝的方式實現文件的下載fileChannel.transferTo(0,fileChannel.size(),writableByteChannel);//關閉對應的資源fileChannel.close();outputStream.flush();writableByteChannel.close();}public static void downloadDoc(String path,HttpServletResponse response) throws IOException {File file = new File(path);if (!file.exists()){throw new RuntimeException("文件不存在");}downloadDoc(file,response);}}

2.文件上傳

/*** 文件上傳方法*/public static Result uploading(MultipartFile file) {//獲取文件名String realName = file.getOriginalFilename();String newName = null;if(realName != null && realName != ""){//獲取文件后綴String suffixName = realName.substring(realName.lastIndexOf("."));//生成新名字newName = UUID.randomUUID().toString().replaceAll("-", "")+suffixName;}else {return Result.fail("文件名不可為空");}//創建流FileInputStream fis = null;FileOutputStream fos = null;//創建通道FileChannel inChannel = null;FileChannel outChannel = null;try {fis = (FileInputStream)file.getInputStream();//開始上傳fos = new FileOutputStream(UPLOAD_URL+"\\"+newName);//通道間傳輸inChannel = fis.getChannel();outChannel = fos.getChannel();//上傳inChannel.transferTo(0,inChannel.size(),outChannel);}catch (IOException e){return Result.fail("文件上傳路徑錯誤");}finally {//關閉資源try {if (fis != null) {fis.close();}if (fos != null) {fos.close();}if (inChannel != null) {inChannel.close();}if (outChannel != null) {outChannel.close();}} catch (IOException e) {e.printStackTrace();}}return Result.ok(newName);}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37743.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37743.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37743.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

武漢地鐵19號線完成5G專網全覆蓋,現場測試下行速率超千兆!

近日,極目新聞記者從中國移動湖北公司獲悉,隨著武漢地鐵19號線全線隧道正式貫通,湖北移動目前已完成新月溪公園至鼓架山站5G網絡覆蓋,軌行區5G專網全覆蓋,并成功進行試車驗證,19號線成為國內首條全線實現5G…

實習筆記(一)

自定義注解: 自定義注解中有三個元注解Target,Retention,Document /*** 系統日志注解** author Mark sunlightcsgmail.com*/ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface SysLog {String value() default "…

2023全國大學生數學建模競賽C題思路模型代碼

目錄 1.C題思路模型:比賽開始后,第一時間更新,獲取見文末名片 2.比賽時間:2023年9月7日18點到2023年9月10日20點 3 全國大學生數學建模競賽常見數模問題 3.1 分類問題 3.2 優化問題 詳細思路見此名片,開賽第一時間…

面試題解析 | 為什么Redis使用單線程性能會優于多線程?

大家好,我是小米!今天我要和大家聊一個有關Redis的熱門面試題:為什么Redis使用單線程性能會優于多線程?相信這個問題在很多同學心中都曾經糾結過,那么接下來,就讓我們一起來揭開這個技術之謎吧!…

LeetCode 37題:解數獨

題目 編寫一個程序,通過填充空格來解決數獨問題。 數獨的解法需 遵循如下規則: 數字 1-9 在每一行只能出現一次。數字 1-9 在每一列只能出現一次。數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。(請參考示例圖) 數獨…

IDEA簡單拷貝一份新項目記錄

IDEA簡單拷貝項目記錄 拷貝后改項目名,然后iml 配置文件改項目名,然后 .idea 中的compiler.xml 里面的name標簽改項目名。 就可以了

【軟件工程】軟件測試

軟件測試的對象 軟件程序文檔 測試對象:各個階段產生的源程序和文檔。 軟件測試的目的 基于不同的立場,對軟件測試的目的存在著兩種完全對立的觀點。 (1)一種觀點是通過測試暴露出軟件中所包含的故障和缺陷(從用戶的角度)&#xf…

ssh-keygen 做好免密登錄后不生效

免密說明 通常情況下,我們ssh到其他服務器需要知道服務器的用戶名和密碼。對于需要經常登錄的服務器每次都輸入密碼比較麻煩,因此我們可以在兩臺服務器上做免密登錄,即在A服務器可以免密登錄B服務器。 在A服務器上登錄B服務器時,…

Tik Tok娛樂+電商MCN怎么做?

在美國外的熱門市場中,TikTok 主要做的區域市場包括中東、拉美、歐洲和東亞,而這里面適合做電商的其實并不多。 歐洲、東亞都屬于成熟市場,且 TikTok 本身在歐洲面臨 DSA 法案更嚴格的審查,與在英國相同,歐洲各市場消…

第G1周:生成對抗網絡(GAN)入門

🍨 本文為[🔗365天深度學習訓練營]內部限免文章(版權歸 *K同學啊* 所有) 🍖 作者:[K同學啊] 一、理論基礎 生成對抗網絡(Generative Adversarial Networks, GAN)是近年來深度學習領域…

Windows安裝Go開發環境

Windows安裝Go開發環境 一、Go語言下載地址 https://golang.google.cn/dl/ 二、設置工作空間GOPATH目錄(Go語言開發的項目路徑) 首先進入我的C盤(你放到其他盤也行),新建一個文件夾,名字叫做mygo(這個就是你的工作目…

ArcGIS Maps SDK for JavaScript系列之一:在Vue3中加載ArcGIS地圖

目錄 ArcGIS Maps SDK for JavaScript簡介ArcGIS Maps SDK for JavaScript 4.x 的主要特點和功能AMD modules 和 ES modules兩種方式比較Vue3中使用ArcGIS Maps SDK for JavaScript的步驟創建 Vue 3 項目安裝 ArcGIS Maps SDK for JavaScript創建地圖組件 ArcGIS Maps SDK for …

“深入理解JVM:探索Java虛擬機的內部工作原理“

標題:深入理解JVM:探索Java虛擬機的內部工作原理 摘要:本文將深入探索Java虛擬機(JVM)的內部工作原理,包括JVM的架構、類加載、內存管理、垃圾回收機制等方面。通過理解JVM的內部工作原理,我們…

華為開源自研AI框架昇思MindSpore應用案例:基于MindSpore框架的UNet-2D案例實現

目錄 一、環境準備1.進入ModelArts官網2.使用CodeLab體驗Notebook實例 二、環境準備與數據讀取三、模型解析Transformer基本原理Attention模塊 Transformer EncoderViT模型的輸入整體構建ViT 四、模型訓練與推理模型訓練模型驗證模型推理 近些年,隨著基于自注意&…

改造舊項目-長安分局人事費用管理系統

一、系統環境搭建 1、搭建前臺環境 vue3vite構建項目復制“銀稅系統”頁面結構,包括:路由、vuex存儲、菜單、登錄(復制一個干凈的空架子) 2、搭建后臺環境 新三大框架 SSMP聚合工程:common、admin,新的…

JAVA冒泡排序

package com.hzh.javase.day03;public class maopao {public static void main(String[] args) {int[] arr {2, 11,4,7,5,22,15,37,12,1};int zjvalue 0;//中間值boolean boofalse; //冒泡比較相鄰元素將小的提前打的放后 // 外層循環時用來控制輪數 // 內存循…

2023國賽數學建模E題思路分析

文章目錄 0 賽題思路1 競賽信息2 競賽時間3 建模常見問題類型3.1 分類問題3.2 優化問題3.3 預測問題3.4 評價問題 4 建模資料 0 賽題思路 (賽題出來以后第一時間在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 競賽信息 全國大學生數學建模…

Linux服務器上配置HTTP和HTTPS代理

本文將向你分享如何在Linux服務器上配置HTTP和HTTPS代理的方法,解決可能遇到的問題,讓你的爬蟲項目順利運行,暢爬互聯網! 配置HTTP代理的步驟 1. 了解HTTP代理的類型:常見的有正向代理和反向代理兩種類型。根據實際需求…

涉及近300個業務場景,重慶銀行數字員工平臺建設解析

隨著數字化轉型戰略規劃的逐步落地,重慶銀行于2022年6月成功建設了數字員工平臺,該平臺已成為行內數字化轉型的標桿應用。數字員工平臺以RPA(機器人流程自動化)為基礎,AI(人工智能)技術為抓手&a…

PHP最簡單自定義自己的框架view使用引入smarty(8)--自定義的框架完成

1、實現效果。引入smarty, 實現assign和 display 2、下載smarty,創建緩存目錄cache和擴展extend 點擊下面查看具體下載使用,下載改名后放到extend PHP之Smarty使用以及框架display和assign原理_PHP隔壁老王鄰居的博客-CSDN博客 3、當前控…