成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:3日期: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国内精品久久久久久久
久久九九电影| 激情成人午夜视频| 黑人巨大精品欧美一区| 日本久久精品电影| 亚洲图片欧美色图| 中日韩男男gay无套| 亚洲少妇最新在线视频| 国语自产精品视频在线看抢先版结局| 久久久午夜电影| av不卡在线播放| 精品国产一区二区三区久久久蜜月| 国产一区91精品张津瑜| 欧美久久免费观看| 国产一区二区在线影院| 91黄色激情网站| 欧美a一区二区| 欧美自拍偷拍一区| 麻豆成人91精品二区三区| 欧美色精品在线视频| 青青国产91久久久久久| 色av一区二区| 蜜桃视频一区二区三区在线观看| 欧美色网站导航| 激情伊人五月天久久综合| 欧美丰满嫩嫩电影| 国产一二精品视频| 日韩一级免费观看| 成人白浆超碰人人人人| 2023国产精品自拍| 95精品视频在线| 久久久电影一区二区三区| 91丨porny丨首页| 国产精品国产三级国产aⅴ入口 | 国产福利一区二区三区| 精品日韩在线观看| 偷偷要91色婷婷| 精品久久国产字幕高潮| 99精品国产在热久久| 亚洲人成伊人成综合网小说| 一本久道久久综合狠狠爱| 亚洲男女一区二区三区| 欧美国产日本| 国产精品丝袜久久久久久app| 欧美日韩亚洲三区| 亚洲人成网站影音先锋播放| 亚洲欧美清纯在线制服| 免费成人在线播放| 欧美一区二区三区免费视频 | 亚洲三级免费观看| 亚洲欧美日本国产专区一区| 日韩国产一二三区| 欧美一区二区精品久久911| 97超碰欧美中文字幕| 国产精品青草久久| 国产日韩一区欧美| 青青草一区二区三区| 日韩一区二区视频| 欧美精品福利| 午夜精品福利视频网站| 欧美人牲a欧美精品| 91丨porny丨首页| 亚洲午夜久久久久久久久电影院| 欧美色图天堂网| 99久久精品国产麻豆演员表| 亚洲另类一区二区| 欧美日韩黄色影视| 欧美成人69| 视频一区免费在线观看| 欧美电视剧免费观看| 亚洲人体偷拍| 麻豆国产精品一区二区三区| 久久久99精品免费观看不卡| 亚洲一级在线| 国产99久久久国产精品潘金| 综合av第一页| 欧美美女视频在线观看| 欧美bbbxxxxx| 日韩成人精品在线| 国产婷婷精品av在线| 久久都是精品| 99亚偷拍自图区亚洲| 性做久久久久久久久| 精品国产免费人成电影在线观看四季| 99在线精品免费视频九九视| 狠狠色2019综合网| 中文字幕av在线一区二区三区| 亚洲精选一二三| 欧美午夜精品久久久久久超碰 | 国色天香一区二区| 久久99九九99精品| 亚洲欧洲在线观看av| 欧美高清视频在线高清观看mv色露露十八| 欧美精品导航| 国内精品伊人久久久久av一坑| 亚洲欧洲99久久| 3d成人动漫网站| 亚洲欧洲一区二区在线观看| 韩国成人精品a∨在线观看| 中文无字幕一区二区三区| 91福利在线观看| 色综合久久综合网欧美综合网 | 国产宾馆实践打屁股91| 一区二区在线看| 欧美日韩精品高清| 国产一区二区三区av电影| 91视视频在线观看入口直接观看www | 久久狠狠亚洲综合| 欧美高清在线精品一区| 欧美色倩网站大全免费| 亚洲毛片av| 91在线视频播放地址| 卡一卡二国产精品| 一区二区成人在线| 欧美69wwwcom| 久久国产尿小便嘘嘘| 一区二区三区免费看视频| 久久奇米777| 欧美精品一卡两卡| 久久另类ts人妖一区二区| 1000部精品久久久久久久久| 成人av在线一区二区三区| 美女视频网站久久| 亚洲国产精品一区二区www | 亚洲男人的天堂一区二区 | 精品sm捆绑视频| 欧美性猛交xxxx黑人交| 亚洲人www| 欧美不卡三区| 国产黄色精品网站| 免费看日韩精品| 一区二区三区日本| 欧美国产精品劲爆| 精品免费日韩av| 欧美日韩精品一区视频| 乱人伦精品视频在线观看| 亚洲网站视频| 91亚洲精品一区二区乱码| 国产精品一级二级三级| 日韩精品欧美成人高清一区二区| 国产精品免费网站在线观看| 日韩视频免费直播| 欧美色手机在线观看| 一本一本久久a久久精品综合麻豆| 国产精品对白刺激久久久| 99久久综合精品| 国产精品亚洲专一区二区三区| 日本伊人精品一区二区三区观看方式 | 色88888久久久久久影院野外| 在线欧美福利| 欧美日韩三级| 色综合色狠狠综合色| 成人黄色大片在线观看| 国内精品写真在线观看| 蜜桃久久av一区| 日本不卡中文字幕| 丝袜a∨在线一区二区三区不卡| 亚洲欧美偷拍卡通变态| 国产精品久久久久aaaa樱花| 国产无人区一区二区三区| 久久久久久久久久看片| 精品国产91久久久久久久妲己| 欧美一区二区精美| 7777精品伊人久久久大香线蕉的| 欧美三级欧美一级| 欧美天堂亚洲电影院在线播放| 日本韩国欧美一区二区三区| 欧美在线综合| 亚洲综合好骚| 男人的天堂亚洲在线| 免费视频一区二区三区在线观看| 亚洲一区久久| 亚洲欧美日本视频在线观看| 亚洲欧美日韩精品一区二区| 国产精品久久777777毛茸茸| 国产精品亚洲不卡a| 欧美精品一区二区三区在线看午夜 | 国产精品综合一区二区三区| 国产在线精品免费| 国产一区二区伦理| 国产成人综合亚洲网站| 国产一区二区三区日韩| 粉嫩高潮美女一区二区三区 | 国产精品久久7| 国产一区二区在线观看免费播放| 国自产拍偷拍福利精品免费一| 国内在线观看一区二区三区| 91久久黄色| 亚洲一区二区三区高清不卡| 久久成人在线| 日本精品裸体写真集在线观看| 欧美网站一区二区| 日韩色视频在线观看| 久久久综合精品| 国产农村妇女毛片精品久久麻豆| 亚洲国产岛国毛片在线| 亚洲精品一二三| 视频一区在线播放| 国产乱人伦偷精品视频不卡| 91亚洲永久精品| 亚洲国产精品一区|