javascript
SpringBoot集成FastDFS依赖实现文件上传
前言
對(duì)FastDFS文件系統(tǒng)安裝后的使用。
FastDFS的安裝請(qǐng)參考這篇:https://www.cnblogs.com/niceyoo/p/13511082.html
本文環(huán)境:IDEA + JDK1.8 + Maven
1、引入依賴
簡(jiǎn)單說(shuō)一下這個(gè)依賴部分,目前大部分都是采用的如下依賴:
<!-- https://mvnrepository.com/artifact/net.oschina.zcx7878/fastdfs-client-java --> <dependency><groupId>net.oschina.zcx7878</groupId><artifactId>fastdfs-client-java</artifactId><version>1.27.0.0</version> </dependency>本著不重復(fù)造輪子,且為了使用方便我們可以去GitHub找一個(gè)集成好的依賴:
https://github.com/tobato/FastDFS_Client
<dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId><version>1.27.2</version> </dependency>2、將Fdfs配置引入項(xiàng)目
只需要?jiǎng)?chuàng)建一個(gè)配置類就可以了:
@Configuration @Import(FdfsClientConfig.class) @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING) public class ComponetImport {// 導(dǎo)入依賴組件 }參考截圖:
 
3、在application.yml當(dāng)中配置Fdfs相關(guān)參數(shù)
根據(jù)自己情況修改相應(yīng)ip地址及端口號(hào):
server:port: 8080ip: 10.211.55.4 # 根據(jù)自己FastDFS服務(wù)器修改fdfs:so-timeout: 1501connect-timeout: 601thumb-image: #縮略圖生成參數(shù)width: 150height: 150tracker-list: #TrackerList參數(shù),支持多個(gè)- 10.211.55.4:22122web-server-url: http://${ip}:8888/4、client封裝工具類
import com.github.tobato.fastdfs.domain.conn.FdfsWebServer; import com.github.tobato.fastdfs.domain.fdfs.StorePath; import com.github.tobato.fastdfs.domain.proto.storage.DownloadByteArray; import com.github.tobato.fastdfs.exception.FdfsUnsupportStorePathException; import com.github.tobato.fastdfs.service.FastFileStorageClient; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.charset.Charset;@Component public class FastDFSClient {@Autowiredprivate FastFileStorageClient storageClient;@Autowiredprivate FdfsWebServer fdfsWebServer;/*** 上傳文件* @param file 文件對(duì)象* @return 文件訪問(wèn)地址* @throws IOException*/public String uploadFile(MultipartFile file) throws IOException {StorePath storePath = storageClient.uploadFile(file.getInputStream(),file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()),null);return getResAccessUrl(storePath);}/*** 上傳文件* @param file 文件對(duì)象* @return 文件訪問(wèn)地址* @throws IOException*/public String uploadFile(File file) throws IOException {FileInputStream inputStream = new FileInputStream (file);StorePath storePath = storageClient.uploadFile(inputStream,file.length(), FilenameUtils.getExtension(file.getName()),null);return getResAccessUrl(storePath);}/*** 將一段字符串生成一個(gè)文件上傳* @param content 文件內(nèi)容* @param fileExtension* @return*/public String uploadFile(String content, String fileExtension) {byte[] buff = content.getBytes(Charset.forName("UTF-8"));ByteArrayInputStream stream = new ByteArrayInputStream(buff);StorePath storePath = storageClient.uploadFile(stream,buff.length, fileExtension,null);return getResAccessUrl(storePath);}/*** 封裝圖片完整URL地址*/private String getResAccessUrl(StorePath storePath) {String fileUrl = fdfsWebServer.getWebServerUrl() + storePath.getFullPath();return fileUrl;}/*** 刪除文件* @param fileUrl 文件訪問(wèn)地址* @return*/public void deleteFile(String fileUrl) {if (StringUtils.isEmpty(fileUrl)) {return;}try {StorePath storePath = StorePath.parseFromUrl(fileUrl);storageClient.deleteFile(storePath.getGroup(), storePath.getPath());} catch (FdfsUnsupportStorePathException e) {System.out.println(e.getMessage());// TODO 只是測(cè)試,所以未使用,logger,正式環(huán)境請(qǐng)修改打印方式}}/*** 下載文件** @param fileUrl 文件URL* @return 文件字節(jié)* @throws IOException*/public byte[] downloadFile(String fileUrl) throws IOException {String group = fileUrl.substring(0, fileUrl.indexOf("/"));String path = fileUrl.substring(fileUrl.indexOf("/") + 1);DownloadByteArray downloadByteArray = new DownloadByteArray();byte[] bytes = storageClient.downloadFile(group, path, downloadByteArray);return bytes;}}5、創(chuàng)建Conttoler測(cè)試類
5.1 文件上傳測(cè)試
@RestController @RequestMapping("/file") public class FileUploadController {@Autowiredprivate FastDFSClient fastDFSClient;/*** 上傳* @param file* @return* @throws IOException*/@RequestMapping("/upload")public String uploadFile(MultipartFile file) throws IOException {return fastDFSClient.uploadFile(file);}}執(zhí)行效果截圖:
 
5.2、下載文件測(cè)試
@RestController @RequestMapping("/file") public class FileUploadController {@Autowiredprivate FastDFSClient fastDFSClient;/*** 下載* @param fileUrl* @param response* @throws IOException*/@RequestMapping("/download")public void downloadFile(String fileUrl, HttpServletResponse response) throws IOException {byte[] bytes = fastDFSClient.downloadFile(fileUrl);// TODO 這里只是為了整合fastdfs,所以寫(xiě)死了文件格式。需要在上傳的時(shí)候保存文件名。下載的時(shí)候使用對(duì)應(yīng)的格式response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("sb.xlsx", "UTF-8"));response.setCharacterEncoding("UTF-8");ServletOutputStream outputStream = null;try {outputStream = response.getOutputStream();outputStream.write(bytes);} catch (IOException e) {e.printStackTrace();} finally {try {outputStream.flush();outputStream.close();} catch (IOException e) {e.printStackTrace();}}}}測(cè)試下載路徑:
http://127.0.0.1:8080/file/download?fileUrl=group1/M00/00/00/CtM3BF84r4SAEPDgAABoGL78QcY682.jpg
拼接的參數(shù)為:group1/M00/00/00/CtM3BF84r4SAEPDgAABoGL78QcY682.jpg
大家想修改路徑的話,需要同步修改 downloadFile() 方法里的分隔方式。
 
你知道的越多,不知道的就越多,歡迎關(guān)注我的微信公眾號(hào):niceyoo
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的SpringBoot集成FastDFS依赖实现文件上传的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 160523、Oracle建立表空间和用
- 下一篇: 医院网络安全架构
