日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MultipartFile实现图片上传上传

發布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MultipartFile实现图片上传上传 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MultipartFile: SpringMVC專對文件的上傳開發的API

1 文件上傳入門案例

/*** url地址:/file* 參數: fileImage* 返回值: 返回成功的提示信息** 知識回顧: IO流的操作的方式 作業* 1.低級流 FileInputStreamFile/FileOutputStream* 2.緩存流 BufferedInputStream/BufferedOutputStream* 3.高級流字符流 Reader/Writer** 最大的困難: 1.API不好記..... 多* 2.代碼的格式 不好理解* 3.經常性的出現不關流的失誤.** MultipartFile: SpringMVC專對文件的上傳開發的API* 默認的最大只允許上傳1M的數據* @return*/@RequestMapping("/file")public String upload(MultipartFile fileImage) throws IOException {//1.獲取圖片的真實名稱String fileName = fileImage.getOriginalFilename();//2.設定文件上傳的地址 寫成/更加符合Linux的語法特點 為了以后通用使用/String dir = "E:/JT_IMAGE";//3.最好對目錄進行校驗 判斷是否存在.File dirFile = new File(dir);if(!dirFile.exists()){//如果文件不存在,則創建一個文件目錄dirFile.mkdirs();}//4.實現文件上傳 需要指定文件的全路徑 目錄路徑/文件名稱String filePath = dir + "/" + fileName;//5.實現文件上傳操作fileImage.transferTo(new File(filePath));return "文件上傳成功!!!!";}

2. 實現圖片文件上傳

1 頁面URL分析

2 參數說明

3 頁面JS分析

4 文件上傳返回值分析

5 回顯VO封裝

import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors;@Data @Accessors(chain = true) @AllArgsConstructor @NoArgsConstructor public class ImageVo {//{"error":0,"url":"圖片的保存路徑","width":"圖片的寬度","height":圖片的高度}private Integer error; //0 正常 1失敗private String url;private Integer width;private Integer height;public static ImageVo fail(){return new ImageVo(1,null,null,null);}public static ImageVo success(String url,Integer width,Integer height){return new ImageVo(0, url, width, height);} }

6 編輯FileController

/*** 實現文件上傳* 1.頁面URL地址:http://localhost:8091/pic/upload?dir=image* 2.參數信息: uploadFile* 3.返回值: ImageVO對象*/@RequestMapping("/pic/upload")public ImageVO uploadFile(MultipartFile uploadFile){return fileService.upload(uploadFile);}

7 編輯properties配置文件

8 編輯FileService

import com.jt.vo.ImageVo; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile;import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashSet; import java.util.Set; import java.util.UUID;@Service @PropertySource(value = "classpath:/properties/image.properties" ,encoding = "UTF-8") public class FileServiceImpl implements FileService{//方式1:利用集合實現數據的校驗private static Set<String> typeSet=new HashSet<>();@Value("${image.localDirPath}")private String localDirPath; //="E:/JT_IMAGE";@Value("${image.urlPath}")private String urlPath; //="http://image.jt.com";static {//靜態代碼塊 為屬性賦值,初始化實例對象typeSet.add(".jpg");typeSet.add(".png");typeSet.add(".gif");}/*** 知識點:* 1、代碼的安全性* 2多問一下自己,如果什么該怎么辦** 文件上傳的業務說明:* 1、校驗文件上傳是否為圖片的類型??jpg/png/gif...* 2、為了防止惡意的程序,需要校驗是否為圖片的文件 木馬.exe.jpg* 3、為了保證檢索的速度,需要將圖片,分目錄存儲* 4、如何防止我們文件重名* @param uploadFile* @return*//*@Overridepublic ImageVo upload(MultipartFile uploadFile) {//1、校驗是否為圖片類型 (BUG 一般條件下不出問題,當傳入特定數據時,可能出現問題)//1.1 獲取用戶上傳文件的類型 a.jpgString fileName = uploadFile.getOriginalFilename();//為了防止大小寫問題 導致的校驗異常bugfileName = fileName.toLowerCase();//1.2 獲取下標int index = fileName.lastIndexOf(".");//1.3 如果下標為-1沒有后綴,提前結束if (index==-1){//沒有后綴,程序應該提前結束return ImageVo.fail();}String fileType = fileName.substring(index);//1.3校驗是否為圖片類型if (!typeSet.contains(fileType)){//圖片類型不符return ImageVo.fail();}return null;}*//*** 知識點:* 1、代碼的安全性* 2多問一下自己,如果什么該怎么辦** 文件上傳的業務說明:* 1、校驗文件上傳是否為圖片的類型??jpg/png/gif...* 2、為了防止惡意的程序,需要校驗是否為圖片的文件 木馬.exe.jpg* 3、為了保證檢索的速度,需要將圖片,分目錄存儲* 4、如何防止我們文件重名* @param uploadFile* @return*/@Overridepublic ImageVo upload(MultipartFile uploadFile) {//1、校驗文件類型 abc.jpgString fileName = uploadFile.getOriginalFilename().toLowerCase();//1.1 利用正則表達式校驗是否滿足圖片格式要求if (!fileName.matches("^.+\\.(jpg|png|gif)$")){return ImageVo.fail();}//2、校驗是否為圖片對象try{BufferedImage bufferedImage = ImageIO.read(uploadFile.getInputStream());int width=bufferedImage.getWidth();int height=bufferedImage.getHeight();if (width == 0||height==0){return ImageVo.fail();}//3、實現分目錄存儲//3.1 動態生成hashcode編碼 之后2位一隔 生成多級目錄,// 目錄層積太深,笛卡爾較大,遍歷不便//3.2 可以動態的以當前的時間為存儲的目錄結構String dateDirPath=new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());//文件的存儲目錄 E:/JT_IMAGE/2021/01/26/String fileDirPath=localDirPath+dateDirPath;File fileDir=new File(fileDirPath);if (!fileDir.exists()){ //判斷文件目錄是否存在fileDir.mkdirs(); //創建目錄}//4、利用UUID動態生成圖片名稱 uuid.jpgString uuid =UUID.randomUUID().toString().replace("-", "");//abc.jpgString fileType=fileName.substring(fileName.lastIndexOf("."));String newFileName=uuid+fileType;//5、實現文件上傳File realFile=new File(fileDirPath+newFileName);uploadFile.transferTo(realFile);//6、編輯圖片的虛擬路徑//6.1 磁盤地址 E:\JT_IMAGE\2021\01\26\1b0e435933ac42cabec53b20ffbcfe90.png//6.2 虛擬地址 http://image.jt.com\2021\01\26\1b0e435933ac42cabec53b20ffbcfe90.pngString url=urlPath+dateDirPath+newFileName;return ImageVo.success(url, width, height);}catch (IOException e){e.printStackTrace();return ImageVo.fail();}} }

9.頁面效果展現
1).上傳圖片完成之后,顯示域名地址如下

2).切換磁盤地址 檢查路徑是否正確

總結

以上是生活随笔為你收集整理的MultipartFile实现图片上传上传的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。