国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

基于SpringBoot實(shí)現(xiàn)上傳2種方法工程代碼實(shí)例

瀏覽:2日期:2023-05-01 15:45:14

創(chuàng)建SpringBoot工程:

基于SpringBoot實(shí)現(xiàn)上傳2種方法工程代碼實(shí)例

再導(dǎo)入所需要的依賴:

<dependency> <groupId>net.oschina.zcx7878</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.27.0.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency>

創(chuàng)建上傳業(yè)務(wù)層程序:

package cn.dzz.fastdfs.service;import org.apache.commons.lang3.StringUtils;import org.csource.fastdfs.*;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import org.springframework.web.multipart.MultipartFile;import java.util.HashMap;import java.util.Map;/** * @author DaiZhiZhou * @file Boot-With-FastDFS * @create 2020-08-13 8:55 */// @PropertySource()@Componentpublic class UploadService { @Value('${fastdfs.tracker_servers}') private String tracker_servers; @Value('${fastdfs.connect_timeout_in_seconds}') private int connect_timeout; @Value('${fastdfs.network_timeout_in_seconds}') private int network_timeout; @Value('${fastdfs.charset}') private String charset; public Map<String,Object> upload(MultipartFile multipartFile) { if (multipartFile == null) { throw new RuntimeException('文件不能為空'); } // 上傳至fastDFS, 返回文件id String fileId = this.fdfsUpload(multipartFile); if (StringUtils.isEmpty(fileId)) { System.out.println('上傳失敗'); throw new RuntimeException('上傳失敗'); } Map<String, Object> map=new HashMap<>(); map.put('code',200); map.put('msg','上傳成功'); map.put('fileId',fileId); return map; } /** * 上傳至fastDFS * @param multipartFile * @return 文件id */ private String fdfsUpload(MultipartFile multipartFile) { // 1. 初始化fastDFS的環(huán)境 initFdfsConfig(); // 2. 獲取trackerClient服務(wù) TrackerClient trackerClient = new TrackerClient(); try { TrackerServer trackerServer = trackerClient.getConnection(); // 3. 獲取storage服務(wù) StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer); // 4. 獲取storageClient StorageClient1 storageClient1 = new StorageClient1(trackerServer, storeStorage); // 5. 上傳文件 (文件字節(jié), 文件擴(kuò)展名, ) // 5.1 獲取文件擴(kuò)展名 String originalFilename = multipartFile.getOriginalFilename(); String extName = originalFilename.substring(originalFilename.lastIndexOf('.') + 1); // 5.2 上傳 String fileId = storageClient1.upload_file1(multipartFile.getBytes(), extName, null); return fileId; } catch (Exception e) { System.out.println(e); return null; } } /** * 初始化fastDFS的環(huán)境 */ private void initFdfsConfig() { try { ClientGlobal.initByTrackers(tracker_servers); ClientGlobal.setG_connect_timeout(connect_timeout); ClientGlobal.setG_network_timeout(network_timeout); ClientGlobal.setG_charset(charset); } catch (Exception e) { System.out.println(e); } }}

創(chuàng)建上傳控制器:

package cn.dzz.fastdfs.controller;import cn.dzz.fastdfs.service.UploadService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.multipart.MultipartFile;import java.util.Map;/** * @author DaiZhiZhou * @file Boot-With-FastDFS * @create 2020-08-13 8:58 */@RestController@RequestMapping('upload')public class UploadController { @Autowired private UploadService uploadService; /** * 作上傳 */ @RequestMapping('doUpload') public Map<String,Object> doUpload(MultipartFile mf){ System.out.println(mf.getOriginalFilename()); Map<String, Object> map = uploadService.upload(mf); return map; }}

在static目錄中創(chuàng)建index.html用于上傳測(cè)試:

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <title>Title</title></head><body><h1>文件上傳</h1><hr><form action='/upload/doUpload' method='post' enctype='multipart/form-data'> <input type='file' name='mf'> <input type='submit' value='上傳'></form></body></html>

運(yùn)行SpringBoot進(jìn)行測(cè)試:

基于SpringBoot實(shí)現(xiàn)上傳2種方法工程代碼實(shí)例

測(cè)試成功:

基于SpringBoot實(shí)現(xiàn)上傳2種方法工程代碼實(shí)例

查看文件位置也可以被訪問到:

基于SpringBoot實(shí)現(xiàn)上傳2種方法工程代碼實(shí)例

上傳文件實(shí)現(xiàn)方式二:

更改依賴:

<!-- https://mvnrepository.com/artifact/com.github.tobato/fastdfs-client --> <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.26.7</version> </dependency>

創(chuàng)建一個(gè)配置類UploadProperties

package cn.dzz.fastdfs.config;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;import java.util.List;/** * @author DaiZhiZhou * @file Boot-With-FastDFS * @create 2020-08-13 9:10 */@Data@Component@ConfigurationProperties(prefix = 'upload')public class UploadProperties { private String baseUrl; private List<String> allowTypes;}

更改之前的yml配置:

fdfs: so-timeout: 2500 # 讀取時(shí)間 connect-timeout: 600 # 連接超時(shí)時(shí)間 thumb-image: # 縮略圖 width: 100 height: 100 tracker-list: # tracker服務(wù)配置地址列表 - 服務(wù)器或者虛擬機(jī)IP:22122upload: base-url: http://服務(wù)器或者虛擬機(jī)IP/ allow-types: - image/jpeg - image/png - image/bmp - image/gif

編寫UploadProperties.java

package cn.dzz.config;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import java.util.List;/** * @author DaiZhiZhou * @file fdfs * @create 2020-08-13 9:33 */@ConfigurationProperties(prefix = 'upload')@Datapublic class UploadProperties { private String baseUrl; private List<String> allowTypes;}

業(yè)務(wù)層:

package cn.dzz.service;import cn.dzz.config.UploadProperties;import com.github.tobato.fastdfs.domain.fdfs.StorePath;import com.github.tobato.fastdfs.service.FastFileStorageClient;import org.apache.commons.lang3.StringUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.stereotype.Component;import org.springframework.web.multipart.MultipartFile;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.IOException;/** * @author DaiZhiZhou * @file fdfs * @create 2020-08-13 9:34 */@Component@EnableConfigurationProperties(UploadProperties.class)public class UploadService { private Log log= LogFactory.getLog(UploadService.class); @Autowired private FastFileStorageClient storageClient; @Autowired private UploadProperties prop; public String uploadImage(MultipartFile file) { // 1、校驗(yàn)文件類型 String contentType = file.getContentType(); if (!prop.getAllowTypes().contains(contentType)) { throw new RuntimeException('文件類型不支持'); } // 2、校驗(yàn)文件內(nèi)容 try { BufferedImage image = ImageIO.read(file.getInputStream()); if (image == null || image.getWidth() == 0 || image.getHeight() == 0) { throw new RuntimeException('上傳文件有問題'); } } catch (IOException e) { log.error('校驗(yàn)文件內(nèi)容失敗....{}', e); throw new RuntimeException('校驗(yàn)文件內(nèi)容失敗'+e.getMessage()); } try { // 3、上傳到FastDFS // 3.1、獲取擴(kuò)展名 String extension = StringUtils.substringAfterLast(file.getOriginalFilename(), '.'); // 3.2、上傳 StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(), extension, null); // 返回路徑 return prop.getBaseUrl() + storePath.getFullPath(); } catch (IOException e) { log.error('【文件上傳】上傳文件失敗!....{}', e); throw new RuntimeException('【文件上傳】上傳文件失敗!'+e.getMessage()); } }}

控制器:

package cn.dzz.controller;import cn.dzz.service.UploadService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import java.util.HashMap;import java.util.Map;/** * @author DaiZhiZhou * @file fdfs * @create 2020-08-13 9:35 */@RequestMapping('upload')@RestControllerpublic class UploadController { @Autowired private UploadService uploadService; @RequestMapping('doUpload') public Map<String,Object> doUpload(MultipartFile multipartFile) { System.out.println(multipartFile.getOriginalFilename()); Map<String, Object> map = new HashMap<>(); String filePath = uploadService.uploadImage(multipartFile); map.put('filePath', filePath); return map; }}

還是一樣的上傳頁面:

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <title>Title</title></head><body><h1>文件上傳</h1><hr><form action='/upload/doUpload' method='post' enctype='multipart/form-data'> <input type='file' name='mf'> <input type='submit' value='上傳'></form></body></html>

運(yùn)行發(fā)現(xiàn)空指針異常,檢查發(fā)現(xiàn)表單名稱沒對(duì)上,SpringMVC就無法轉(zhuǎn)換了

基于SpringBoot實(shí)現(xiàn)上傳2種方法工程代碼實(shí)例

<input type='file' name='multipartFile'>

再次測(cè)試:

基于SpringBoot實(shí)現(xiàn)上傳2種方法工程代碼實(shí)例

訪問:

基于SpringBoot實(shí)現(xiàn)上傳2種方法工程代碼實(shí)例

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 99九九成人免费视频精品 | 国产九九视频在线观看 | 日本韩国三级在线观看 | 国产成人在线影院 | 韩国自拍偷自拍亚洲精品 | 毛片免费视频观看 | 国产三级视频在线播放 | 小明日韩在线看看永久区域 | 国产黄色一级网站 | 欧美理论片在线观看一区二区 | 手机看片亚洲 | 在线视频观看一区 | 国产a一级毛片含羞草传媒 国产a自拍 | 国产成人精品免费视频软件 | 亚洲午夜18| 午夜成人影视 | 狠色狠狠色狠狠狠色综合久久 | 国产成人精品免费视频大全可播放的 | 日本b站一卡二卡乱码入口 日本s色大片在线观看 | 亚洲日韩中文字幕天堂不卡 | 欧美最爽乱淫视频播放黑人 | 精品久久久久久久久中文字幕 | 精品高清国产a毛片 | 国产爱视频 | 国产精品三级在线播放 | 99re这里只有精品99 | 午夜爽爽爽男女免费观看hd | a国产精品 | 午夜在线社区视频 | 免费观看欧美一级特黄 | 视频一区欧美 | 台湾三级香港三级经典三在线 | 在线视频三区 | 亚洲国产精品一区二区不卡 | 久草青草| 美女很黄很黄是免费的·无遮挡网站 | 国产片在线观看狂喷潮bt天堂 | 久久免费视频在线观看 | 成年片美女福利视频在线 | 免费看一区二区三区 | 九九免费精品视频 |