java fastdfs实现文件(图片)的上传下载

news/2024/11/15 0:42:51/

1、首先引入依赖、目录结构:

<!--fastdfs-->
<dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId><version>1.26.5</version>
</dependency>

在这里插入图片描述

2、在application.yml中添加如下配置

spring:profiles:active: dev
---
server:port: 9005
spring:application:name: leadnews-dfsprofiles: devdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.211.136:3306/leadnews_article?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456cloud:nacos:server-addr: 192.168.211.136:8848discovery:server-addr: ${spring.cloud.nacos.server-addr}servlet:multipart:max-file-size: 10MBmax-request-size: 10MB
# fastdfs的配置(主要是下边这些配置)
fdfs:so-timeout: 1501connect-timeout: 601thumb-image:             #缩略图生成参数width: 150height: 150tracker-list:- 192.168.211.136:22122 #TrackerList参数,支持多个web-server-url: http://192.168.211.136/  # 设置前缀路径
logging:level.com: info

3、编写启动类

package com.jjw;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class DfsApplication {public static void main(String[] args) {SpringApplication.run(DfsApplication.class, args);}
}

4、编写controller类实现文件的上传下载功能

package com.jjw.dfs.controller;import com.github.tobato.fastdfs.domain.conn.FdfsWebServer;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.domain.proto.storage.DownloadCallback;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.jjw.dfs.dto.DownUrl;
import com.jjw.result.pojo.Result;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@RestController
@RequestMapping("/dfs")
public class FileController {@Autowiredprivate FastFileStorageClient fastFileStorageClient;@Autowiredprivate FdfsWebServer fdfsWebServer;/*** 上传文件** @param file* @return*/@PostMapping("/upload")public Result<Map<String, String>> upload(MultipartFile file) throws Exception {StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(),file.getSize(),StringUtils.getFilenameExtension(file.getOriginalFilename()),null);String fullPath = storePath.getFullPath();String realUrl = fdfsWebServer.getWebServerUrl() + fullPath;Map<String, String> map = new HashMap<String, String>();map.put("url", realUrl);//设置返回图片的路径return Result.ok(map);}@PostMapping("/download")public Result download(@RequestBody DownUrl downUrl) throws Exception {String uploadFile = downUrl.getUploadFile();List<String> list = Arrays.asList(uploadFile.split("/"));String groupName = list.get(1);String fileName = list.get(list.size() - 1);List<String> list1 = Arrays.asList(uploadFile.split("/" + groupName+"/"));String localPalace = list1.get(list1.size() - 1);byte[] group1s = fastFileStorageClient.downloadFile(groupName, localPalace, new DownloadCallback<byte[]>() {@Overridepublic byte[] recv(InputStream ins) throws IOException {//获取字节数组byte[] bytes = IOUtils.toByteArray(ins);return bytes;}});String downloadPlace = downUrl.getDownloadPlace();//下载FileOutputStream fileOutputStream = new FileOutputStream(new File(downloadPlace+"/"+fileName));fileOutputStream.write(group1s);fileOutputStream.close();return Result.ok();}
}

DownUrl中的内容:

package com.jjw.dfs.dto;import lombok.Data;@Data
public class DownUrl {private String downloadPlace;private String uploadFile;
}

对上传文件进行测试:

在这里插入图片描述
在这里插入图片描述

对下载文件进行测试:

在这里插入图片描述

看到有图片下载下来了

在这里插入图片描述


http://www.ppmy.cn/news/698393.html

相关文章

Spring:Bean

Bean 概述配置方式自动装配继承与依赖作用域外部属性文件的使用 概述 Spring 容器负责管理依赖注入&#xff0c;它将被管理的对象都称为 bean 。我们通过 xml 文件配置方式进行对 bean 的声明和管理。 写法如下&#xff1a; <beans><bean id"bean的唯一标识符…

商务车改装,地板种类很多怎么选择?

现在的商务车改装&#xff0c;地板是一个常规项目。但是现在的地板花样繁多&#xff0c;今天我告诉你地板到底怎么选。 现在地板一般分为六种&#xff0c;地毯&#xff0c;游艇木地板、镜面地板、金刚石地板、大理石地板&#xff0c;还有航空铝板。 先来说说地毯&#xff0c;…

与爱车在城市中穿梭!维乐坐垫为你护航

想要一只适合自己的坐垫总是寻寻觅觅寻不得&#xff1f;别担心&#xff0c;大家都一样~对于自行车骑手来说&#xff0c;想要找到一只完美符合自己想象的坐垫简直就和寻找真爱一样难&#xff01;这其中需要缘分也需要运气。      怎样的坐垫才能既有舒适的坐感&#xff0c;又…

比亚迪速锐F3专用夏季座套 夏天坐垫 四季坐套

淘宝地址&#xff1a;http://www.dwz.cn/6nqd8 比亚迪速锐F3专用夏季座套 夏天坐垫 四季坐套 比亚迪速锐的座套对汽车座椅起到很好的保护作用。选择布座套应该选专业厂家出厂的产品&#xff0c;质量好才会美观服帖&#xff0c;汽车真皮座套方便安装&#xff1b;而安装座套也应选…

用产品致敬生活艺术——风行欧洲的维乐坐垫

欧洲近年来愈发风靡自然环保的骑行生活&#xff0c;但是从推行速度来看&#xff0c;荷兰远远要比法国更快。一个移民法国的荷兰人一语道破真相&#xff1a;“如果打开谷歌&#xff0c;在上面搜索自行车&#xff0c;法国人看到的都是顶级选手全副武装的比赛照片。然而同一个字眼…

auto.js4.1安装包及打包插件免费下载

auto.js4.1安装包及打包插件免费下载 用这个4.1版本吧&#xff0c;打包apk可以使用&#xff0c;手机开热点连接电脑[打call] 链接&#xff1a;https://pan.baidu.com/s/1n4-wnSYZlwW9RKMNoU5edg 提取码&#xff1a;auto

公交车座位的坐垫设计成可替换,冬夏两用

现在公交车座位坐垫&#xff0c;都是塑料&#xff0c;夏天还好&#xff0c;冬天很凉。所以应该成冬夏两用。有几种方案&#xff1a; 两种座位。换季时&#xff0c;替换相应的座位&#xff0c;不用的放入仓库。坐垫可替换。这也有多种方案&#xff0c;如两种坐垫&#xff0c;正…

一种可以固定大客车座椅靠背电机卡簧的卡簧钳

一种可以固定大客车座椅靠背电机卡簧的卡簧钳 技术领域 本实用新型涉及汽车工具领域&#xff0c;具体地说是&#xff0c;一种可以固定大客车座椅靠背电机卡簧的卡簧钳。 背景技术 现有汽车卡簧钳拆装卡簧都是依靠手臂将钳子张开或关闭&#xff0c;进而将卡簧张开或关闭&…