提交 1140d192 authored 作者: 许志图's avatar 许志图

增加FastDFS文件上传接口

上级 1ebb33ae
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
<hutool.version>4.3.2</hutool.version> <hutool.version>4.3.2</hutool.version>
<ttl.version>2.10.1</ttl.version> <ttl.version>2.10.1</ttl.version>
<spring.security.oauth2.version>2.3.5.RELEASE</spring.security.oauth2.version> <spring.security.oauth2.version>2.3.5.RELEASE</spring.security.oauth2.version>
<fastdfs.version>1.26.5</fastdfs.version>
</properties> </properties>
<dependencies> <dependencies>
...@@ -68,6 +69,12 @@ ...@@ -68,6 +69,12 @@
<artifactId>commons-lang</artifactId> <artifactId>commons-lang</artifactId>
<version>2.6</version> <version>2.6</version>
</dependency> </dependency>
<!-- 文件上传依赖包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency> <dependency>
<groupId>commons-configuration</groupId> <groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId> <artifactId>commons-configuration</artifactId>
...@@ -142,7 +149,17 @@ ...@@ -142,7 +149,17 @@
<artifactId>commons-collections4</artifactId> <artifactId>commons-collections4</artifactId>
<version>4.1</version> <version>4.1</version>
</dependency> </dependency>
<!-- fastdfs-client -->
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>${fastdfs.version}</version>
</dependency>
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>${fastdfs.version}</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.elephant.framework.galaxy.aroad.config;
import com.github.tobato.fastdfs.FdfsClientConfig;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableMBeanExport;
import org.springframework.context.annotation.Import;
import org.springframework.jmx.support.RegistrationPolicy;
@Configuration
@Import(FdfsClientConfig.class)
// 解决jmx重复注册bean的问题
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class FastClientImporter {
}
package com.elephant.framework.galaxy.aroad.exception;
/**
* 上传文件异常
*/
public class UploadFileException extends RuntimeException {
public UploadFileException(String message) {
super(message);
}
}
package com.elephant.framework.galaxy.aroad.module.common.controller;
import com.elephant.framework.galaxy.aroad.constant.CommonConstants;
import com.elephant.framework.galaxy.aroad.exception.UploadFileException;
import com.elephant.framework.galaxy.aroad.module.codegen.response.R;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
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.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.*;
/**
* 文件上环fastDFS
*
* @author wangjian
* @date 2019-05-05 16:31:46
*/
@RestController
@RequestMapping("/upload")
public class FileUploadController {
@Autowired
private FastFileStorageClient storageClient;
/**
* 上传图片
*
* @return R
*/
@PostMapping("/images")
public R uploadImage(HttpServletRequest request) throws IOException {
Map<String, String> resultMap = new HashMap<>();
//将当前上下文初始化给 CommonsMultipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//检查form中是否有enctype="multipart/form-data"
if (multipartResolver.isMultipart(request)) {
//将request变成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
List<String> supportFileTypes = Arrays.asList("JPG", "JPEG", "PNG", "GIF", "BMP", "WBMP");
//获取multiRequest 中所有的文件名
Iterator iter = multiRequest.getFileNames();
while (iter.hasNext()) {
String name = iter.next().toString();
//一次遍历所有文件
MultipartFile file = multiRequest.getFile(name);
if (file != null) {
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
if (StringUtils.isBlank(extension)) {
throw new UploadFileException("上传文件类型不支持");
}
if (!supportFileTypes.contains(extension.toUpperCase())) {
throw new UploadFileException("上传文件类型不支持");
}
StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(
file.getInputStream(), file.getSize(), extension, null);
resultMap.put(name, storePath.getFullPath());
}
}
return new R<>(resultMap);
}
return new R(CommonConstants.FAIL, "没有上传文件");
}
/**
* 上传文件
*
* @return R
*/
@PostMapping("/files")
public R uploadFile(HttpServletRequest request) throws IOException {
Map<String, String> resultMap = new HashMap<>();
//将当前上下文初始化给 CommonsMultipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//检查form中是否有enctype="multipart/form-data"
if (multipartResolver.isMultipart(request)) {
//将request变成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
List<String> supportFileTypes = Arrays.asList("TXT", "XLS", "XLSX", "DOC", "DOCX", "PPT", "PPTX", "RAR", "ZIP");
//获取multiRequest 中所有的文件名
Iterator iter = multiRequest.getFileNames();
while (iter.hasNext()) {
String name = iter.next().toString();
//一次遍历所有文件
MultipartFile file = multiRequest.getFile(name);
if (file != null) {
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
if (StringUtils.isBlank(extension)) {
throw new UploadFileException("上传文件类型不支持");
}
if (!supportFileTypes.contains(extension.toUpperCase())) {
throw new UploadFileException("上传文件类型不支持");
}
StorePath storePath = this.storageClient.uploadFile(
file.getInputStream(), file.getSize(), extension, null);
resultMap.put(name, storePath.getFullPath());
}
}
return new R<>(resultMap);
}
return new R(CommonConstants.FAIL, "没有上传文件");
}
}
...@@ -8,8 +8,8 @@ spring: ...@@ -8,8 +8,8 @@ spring:
servlet: servlet:
multipart: multipart:
enabled: true enabled: true
max-file-size: 512000 # 最大支持文件大小 max-file-size: 100MB
max-request-size: 512000 # 最大支持请求大小 max-request-size: 300MB
datasource: datasource:
driver-class-name: com.mysql.jdbc.Driver driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/aroad?useUnicode=true&characterEncoding=utf-8&useSSL=false url: jdbc:mysql://127.0.0.1:3306/aroad?useUnicode=true&characterEncoding=utf-8&useSSL=false
...@@ -42,3 +42,12 @@ mybatis-plus: ...@@ -42,3 +42,12 @@ mybatis-plus:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
prop: prop:
upload-folder: E:\file upload-folder: E:\file
fdfs:
so-timeout: 1501
connect-timeout: 601
thumb-image: # 缩略图
width: 60
height: 60
tracker-list: # tracker地址
- 47.105.47.32:22122
...@@ -8,8 +8,8 @@ spring: ...@@ -8,8 +8,8 @@ spring:
servlet: servlet:
multipart: multipart:
enabled: true enabled: true
max-file-size: 100MB # 最大支持文件大小 max-file-size: 100MB
max-request-size: 300MB # 最大支持请求大小 max-request-size: 300MB
datasource: datasource:
driver-class-name: com.mysql.jdbc.Driver driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3304/aroad?useUnicode=true&characterEncoding=utf-8&useSSL=false url: jdbc:mysql://127.0.0.1:3304/aroad?useUnicode=true&characterEncoding=utf-8&useSSL=false
...@@ -43,3 +43,12 @@ mybatis-plus: ...@@ -43,3 +43,12 @@ mybatis-plus:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
prop: prop:
upload-folder: E:\file upload-folder: E:\file
fdfs:
so-timeout: 1501
connect-timeout: 601
thumb-image: # 缩略图
width: 60
height: 60
tracker-list: # tracker地址
- 47.105.47.32:22122
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论