【辰兮要努力】:hello你好我是辰兮,很高興你能來閱讀,昵稱是希望自己能不斷精進,向著優秀程式員前行!
博客來源于專案以及編程中遇到的問題總結,偶爾會有讀書分享,我會陸續更新Java前端、后臺、資料庫、專案案例等相關知識點總結,感謝你的閱讀和關注,希望我的博客能幫助到更多的人,分享獲取新知,大家一起進步!
吾等采石之人,應懷大教堂之心,愿你們奔赴在各自的熱愛中…
最近專案一直在接觸和檔案上傳相關的知識,趁最近忙里偷閑,那就從基礎開始一點點的整理相關知識吧!

首先我們要認識一下Java中的流
1、“流”是一個抽象的概念,它是對輸入輸出設備的一種抽象理解,在java中,對資料的輸入輸出操作都是以“流”的方式進行的,
2、“流”具有方向性,輸入流、輸出流是相對的,當程式需要從資料源中讀入資料的時候就會開啟一個輸入流,相反,寫出資料到某個資料源目的地的時候也會開啟一個輸出流,
3、資料源可以是檔案、記憶體或者網路等,
接著我們一起看看:MultipartFile工具類
MultipartFile是SpringMVC提供簡化上傳操作的工具類,
在不使用框架之前,都是使用原生的HttpServletRequest來接收上傳的資料,檔案是以二進制流傳遞到后端的,然后需要我們自己轉換為File類,使用了MultipartFile工具類之后,我們對檔案上傳的操作就簡便許多了,
來學習一下MultipartFile工具類全部的介面方法(我已經備注好了哈哈)
package org.springframework.web.multipart;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import org.springframework.core.io.InputStreamSource;
import org.springframework.core.io.Resource;
import org.springframework.lang.Nullable;
import org.springframework.util.FileCopyUtils;
public interface MultipartFile extends InputStreamSource {
//getName() 回傳引數的名稱
String getName();
//獲取源檔案的昵稱
@Nullable
String getOriginalFilename();
//getContentType() 回傳檔案的內容型別
@Nullable
String getContentType();
//isEmpty() 判斷是否為空,或者上傳的檔案是否有內容
boolean isEmpty();
//getSize() 回傳檔案大小 以位元組為單位
long getSize();
//getBytes() 將檔案內容轉化成一個byte[] 回傳
byte[] getBytes() throws IOException;
//getInputStream() 回傳InputStream讀取檔案的內容
InputStream getInputStream() throws IOException;
default Resource getResource() {
return new MultipartFileResource(this);
}
//transferTo(File dest) 用來把 MultipartFile 轉換換成 File
void transferTo(File var1) throws IOException, IllegalStateException;
default void transferTo(Path dest) throws IOException, IllegalStateException {
FileCopyUtils.copy(this.getInputStream(), Files.newOutputStream(dest));
}
}
InputStreamSource 這個介面本質上回傳的還是一個InputStream 流物件
package org.springframework.core.io;
import java.io.IOException;
import java.io.InputStream;
public interface InputStreamSource {
//定位并打開資源,回傳資源對應的輸入流,
//每次呼叫都會回傳新的輸入流,呼叫者在使用完畢后必須關閉該資源,
InputStream getInputStream() throws IOException;
}
正常的檔案上傳介面你可以寫一些幫助類這樣就可以幫助你更好的篩選檔案了,當然很多條件最好在前端也完成,這里我分享過el-upload組件可以簡單參考
Element-UI中el-upload上傳組件(demo詳解)
比如:你要現在檔案型別,大小等等都可以上傳組件完成限制,這樣減輕服務器的壓力
當然Java中也可以寫一些校驗相關的幫助類,幫助我們篩選,如下:僅供參考
//簡單的分享一下吧,僅僅給參考
private String validateImg(MultipartFile file) {
if (file == null) {
throw new RuntimeException("圖片不能為空");
}
if (file.getSize() >= 20 * 1024 * 1024) {
throw new RuntimeException("圖片大小超出最大限制");
}
boolean isPic = FileUtil.isPic(file.getOriginalFilename());
if (!isPic) {
throw new RuntimeException("圖片格式錯誤");
}
String fileName = Objects.requireNonNull(file.getOriginalFilename()).length() > 50 ? file.getOriginalFilename().substring(0, 50) : file.getOriginalFilename();
return fileName;
}
The best investment is to invest in yourself.
非常感謝你閱讀到這里,如果這篇文章對你有幫助,希望能留下你的點贊👍 關注?? 分享👥 留言💬thanks!!!
2020.12.31 22:36 馬上2021年了,祝大家在新的一年有更多的進步,愿你們奔赴在自己的熱愛里!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/243570.html
標籤:java
上一篇:Java 反射編程(上)
下一篇:陣列
