Java實現(xiàn)文件上傳和下載的方法詳解_第1頁
Java實現(xiàn)文件上傳和下載的方法詳解_第2頁
Java實現(xiàn)文件上傳和下載的方法詳解_第3頁
Java實現(xiàn)文件上傳和下載的方法詳解_第4頁
Java實現(xiàn)文件上傳和下載的方法詳解_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第Java實現(xiàn)文件上傳和下載的方法詳解importlombok.extern.slf4j.Slf4j;

importorg.springframework.beans.factory.annotation.Value;

importorg.springframework.web.bind.annotation.PostMapping;

importorg.springframework.web.bind.annotation.RequestMapping;

importorg.springframework.web.bind.annotation.RestController;

importorg.springframework.web.multipart.MultipartFile;

*文件上傳和下載

@RestController

@RequestMapping("/common")

@Slf4j

publicclassCommonController{

@Value("${reggie.path}")

privateStringbasePath;

*文件上傳

*@paramfile

*@return

@PostMapping("/upload")

publicRStringupload(MultipartFilefile){

returnnull;

}

實現(xiàn)步驟:

1、獲取文件的原始文件名,通過原始文件名獲取文件后綴。

2、我們可以通過UUID重新聲明文件名,避免文件名稱重復(fù)造成文件覆蓋。

3、創(chuàng)建文件存放目錄,防止目錄不存在導(dǎo)致文件上傳失敗。

4、將上傳的臨時文件轉(zhuǎn)存到指定位置。

注:

因為我們點擊上傳其實是將文件臨時保存到我們計算機(jī)的一個臨時文件夾內(nèi),如果我們不將其轉(zhuǎn)存,本次請求結(jié)束后,文件也會自動刪除。

最后將文件名返回,我這里需要將文件名存到數(shù)據(jù)庫內(nèi)。

完整代碼:

/**

*@description:文件上傳

*@author:Jie

*@date:2025/8/1510:16

*@param:[file]文件

*@return:文件名

@PostMapping("/upload")

publicRStringupload(MultipartFilefile){

//1、獲取文件的原始文件名,通過原始文件名獲取文件后綴例如:abc.jpg

StringoriginalFilename=file.getOriginalFilename();

Stringsuffix=originalFilename.substring(originalFilename.lastIndexOf("."));

//2、使用UUID重新生成文件名,防止文件名稱重復(fù)造成文件覆蓋

StringfileName=UUID.randomUUID().toString()+suffix;

//3、創(chuàng)建一個目錄對象

Filedir=newFile(basePath);

//判斷當(dāng)前目錄是否存在

if(!dir.exists()){

//目錄不存在,需要創(chuàng)建

dir.mkdirs();

try{

//4、將臨時文件轉(zhuǎn)存到指定位置

file.transferTo(newFile(basePath+fileName));

}catch(IOExceptione){

e.printStackTrace();

returnR.success(fileName);

}

2、下載

2.1介紹

文件下載,也稱為download,是指將文件從服務(wù)器傳輸?shù)奖镜赜嬎銠C(jī)的過程。

通過瀏覽器進(jìn)行文件下載,通常有兩種表現(xiàn)形式:

1、以附件形式下載,彈出保存對話框,將文件保存到指定磁盤目錄

2、直接在瀏覽器中打開

而我要實現(xiàn)的就是在瀏覽器中直接打開。

文件下載,前端頁面可以使用img標(biāo)簽展示下載的圖片。

imgv-if="imageUrl":src="imageUrl"/img

那么,通過img標(biāo)簽如何展示圖片數(shù)據(jù)呢,我們來看一下具體的流程:

在文件上傳成功后,在handleAvatarSuccess方法中獲取文件上傳成功之后返回的數(shù)據(jù)(文件名),然后調(diào)用/common/downloadname=xxx進(jìn)行文件的下載。

在這里,我們想讓上傳的照片能夠在頁面展示出來,所以我們就需要在服務(wù)端將文件以流的形式寫回瀏覽器。

2.2代碼實現(xiàn)

在Controller中定義方法download,并接收頁面?zhèn)鬟f的參數(shù)name,然后讀取圖片文件的數(shù)據(jù),然后以流的形式寫回瀏覽器。

/**

*@description:文件下載

*@author:Jie

*@date:2025/8/1510:46

@GetMapping("/download")

publicvoiddownload(Stringname,HttpServletResponseresponse){

}

實現(xiàn)步驟:

1、定義輸入流,通過輸入流讀取文件內(nèi)容。

2、通過response對象,獲取到輸出流。

3、通過response對象設(shè)置響應(yīng)數(shù)據(jù)格式(image/jpeg)。

4、通過輸入流讀取文件數(shù)據(jù),然后通過上述的輸出流寫回瀏覽器。

5、關(guān)閉資源

完整代碼:

/**

*@description:文件下載

*@author:Jie

*@date:2025/8/1510:46

@GetMapping("/download")

publicvoiddownload(Stringname,HttpServletResponseresponse){

try{

//1、定義輸入流,通過輸入流讀取文件內(nèi)容

FileInputStreamfileInputStream=newFileInputStream(newFile(basePath+name));

//2、通過response對象,獲取到輸出流

ServletOutputStreamoutputStream=response.getOutputStream();

//3、通過response對象設(shè)置響應(yīng)數(shù)據(jù)格式(image/jpeg)

response.setContentType("image/jpeg");

intlen=0;

byte[]bytes=newbyte[1024];

while((len=fileInputStream.read(bytes))!=-1){

//4、通過輸入流讀取文件數(shù)據(jù),然后通過上述的輸出流寫回瀏覽器

outputStream.write(by

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論