目录
fastdfs集成spring mvc
1.安装jar包至本地仓库
install:install-file -DgroupId=org.csource.fastdfs -DartifactId=fastjson -Dversion=1.2 -Dfile=C:\Windows\System32\fastdfs_client_v1.20.jar -Dpackaging=jar
jar包下载地址
链接:https://pan.baidu.com/s/1cgVLFb8zqNu9Vq0zOS9kEA
提取码:7eyo
2.导入依赖
//fastdfs
<dependency>
<groupId>org.csource.fastdfs</groupId>
<artifactId>fastdfs</artifactId>
<version>1.2</version>
</dependency>
//文件上传组件
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
3.上传文件代码
tracker配置文件 文件名 tracker.conf
//tracker客户端地址
tracker_server=192.168.94.3:22122
spring mvc配置文件
<!-- 配置文件解析器对象,要求id名称必须是multipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--最大文件的大小-->
<property name="maxUploadSize" value="10485760"/>
</bean>
UploadUtil类
package com.pingyougou.common.utils;
import org.csource.fastdfs.*;
public class UploadUtil {
//本地文件上传
public static String[] upload(String confFileName,String filePath) throws Exception {
ClientGlobal.init(confFileName);
//创建tracker客户端
TrackerClient trackerClient = new TrackerClient();
//链接tracker服务
TrackerServer trackerServer = trackerClient.getConnection();
//通过链接tracker获得Storage信息并创建一个Storage服务端和客户端
StorageClient storageClient = new StorageClient(trackerServer, null);
/***
* 通过客户端想storage上传图片
* buffer:文件的字节数组
* subfix:文件的后缀
* 上传响应信息
* fileinfos[0]:文件存储的组名
* fileinfos[1]:文件的其他存储区间名和文件名的组合
*/
String[] strings = storageClient.upload_file(filePath, null, null);
return strings;
}
//远程文件上传
public static String upload(String confFileName,byte[] buffer,String suffix) throws Exception {
//获取配置文件路径
confFileName = getConfig(confFileName);
//初始化tracker服务
ClientGlobal.init(confFileName);
//创建tracker客户端
TrackerClient trackerClient = new TrackerClient();
//链接tracker服务
TrackerServer trackerServer = trackerClient.getConnection();
//通过链接tracker获得Storage信息并创建一个Storage服务端和客户端
StorageClient storageClient = new StorageClient(trackerServer, null);
/***
* 通过客户端想storage上传图片
* buffer:文件的字节数组
* subfix:文件的后缀
* 上传响应信息
* fileinfos[0]:文件存储的组名
* fileinfos[1]:文件的其他存储区间名和文件名的组合
*/
String[] strings = storageClient.upload_file(buffer, suffix, null);
if (strings != null) {
return "192.168.94.3" + "/" +strings[0] + "/" + strings[1];
}
return null;
}
/***
* 获取配置文件路径
* @param conf
* @return
*/
public static String getConfig(String conf){
if (conf.contains("classpath:")) {
conf = conf.replace("classpath:",UploadUtil.class.getResource("/").getPath());
}
return conf;
}
public static void main(String[] args) throws Exception {
String filePath = "D:\\Java_Web\\hm49\\code\\pingyougou-parent\\pingyougou-common\\src\\main\\resources\\capture_20200426215004454.jpeg";
String tracker = "D:\\Java_Web\\hm49\\code\\pingyougou-parent\\pingyougou-common\\src\\main\\resources\\tracker.conf";
String[] upload = upload(tracker,filePath);
for (String s : upload) {
System.out.println(s);
}
}
}
UploadController
package com.pingyougou.shop.controller;
import com.alibaba.dubbo.common.utils.StringUtils;
import com.pingyougou.common.utils.UploadUtil;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
@Controller
@RequestMapping("upload")
public class UploadController {
@PostMapping("image")
public ResponseEntity<String> uploadImage(@RequestParam("file")MultipartFile file) throws Exception {
String url = UploadUtil.upload("classpath:tracker.conf", file.getBytes(), file.getOriginalFilename());
if (StringUtils.isBlank(url)) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
}
return ResponseEntity.status(HttpStatus.CREATED).body(url);
}
}