图片
yml
fdfs:
# 连接超时时间
connect-timeout: 600
# 读取时间
so-timeout: 1500
tracker-list:
- 192.168.190.132:22122
# 缩略图配置
thumb-image:
width: 100
height: 100
文件大小
spring:
profiles:
active: @spring.profiles.active@
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
servlet:
multipart:
enabled: true
max-file-size: 100MB
max-request-size: 100MB
依赖
<!--操作流 上传文件操作工具-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<!--fastdfs 分布式文件系统 fastdfs 服务端(linux)-->
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>${fastdfs-client}</version>
</dependency>
搭建FastDfs
docker pull delron/fastdfs
# tracker容器
docker run -dti --network=host --name tracker -v ${HOME}/docker/fdfs/tracker:/var/fdfs delron/fastdfs tracker
# storage容器 (如果无法启动 删除tracker容器 重新开启两个容器并启动)
docker run -dti --network=host --name storage -e TRACKER_SERVER=192.168.190.132:22122 -v ${HOME}/storage:/var/fdfs delron/fastdfs storage
这里的ip是自己的ip
# 容器自启动
docker update --restart=always tracker
docker update --restart=always storage
IUploadService
UploadServiceImpl
package com.briup.cms.service.impl;
import com.briup.cms.service.IUploadService;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
/**
* @Auther: vanse(lyc))
* @Date: 2022/11/4-11-04-9:32
* @Description:com.briup.cms.service.impl
*/
@Service
public class UploadServiceImpl implements IUploadService {
// tracker 追踪 文件服务器
// storage 存文件
@Autowired
private FastFileStorageClient storageClient;
@Override
public String upload(MultipartFile file) {
// hello.jpg
String originalFilename = file.getOriginalFilename();
// groupName 组
// inputstream 文件的流形式
// size 文件的大小
// fileExtName 文件后缀 jpg/png
try {
// 文件返回的路径 /group1/00/00/文件.jpg
StorePath storePath = storageClient.uploadFile(
"group1",
file.getInputStream(), file.getSize(), "jpg");
// 主机+端口+返回路径 默认tracker端口8888 (固定)
String path = "http://192.168.190.132:8888/"+storePath.getFullPath();
System.out.println("path = " + path);
return path;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
这里的ip也是自己的ip
UploadController
package com.briup.cms.web.controller;
import com.briup.cms.service.IUploadService;
import com.briup.common.web.response.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
/**
* @Auther: vanse(lyc))
* @Date: 2022/11/4-11-04-9:41
* @Description:com.briup.cms.web.controller
*/
@RestController
@Api(tags = "文件上传")
public class UploadController {
@Autowired
private IUploadService uploadService;
// post multipart-form
@ApiImplicitParams(
@ApiImplicitParam(name = "file",value = "文件",paramType = "form",dataType ="__file" )
)
@PostMapping(value = "/upload",consumes = "multipart/form-data")
public Result upload(@RequestParam("file") MultipartFile file){
String path = uploadService.upload(file);
System.out.println(file);
return Result.success(path);
}
}