fastdfs连接mysql_fastDFS文件上传简单案例
基于fastDFS做了一个简单的文件上传案例(贼简陋),文件上传成功后将文件信息保存到MySQL数据库中
pom.xml
1
2
3 org.springframework.boot
4 spring-boot-starter-web
5
6
7 org.mybatis.spring.boot
8 mybatis-spring-boot-starter
9 2.0.1
10
11
12
13 mysql
14 mysql-connector-java
15
16
17 net.oschina.zcx7878
18 fastdfs-client-java
19
20
21 org.springframework.boot
22 spring-boot-starter-test
23 test
24
25
26 org.apache.commons
27 commons-io
28
29
springboot启动类
1 @SpringBootApplication
2 public class FastDFSApplication {
3
4 public static void main(String[] args) {
5 SpringApplication.run(FastDFSApplication.class, args);
6 }
7 }
8
Controller
1 import com.xuecheng.fastdfs.api.UserApi;
2 import com.xuecheng.fastdfs.service.UserService;
3 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.web.bind.annotation.PostMapping;
5 import org.springframework.web.bind.annotation.RequestParam;
6 import org.springframework.web.bind.annotation.RestController;
7 import org.springframework.web.multipart.MultipartFile;
9 import java.util.Map;
10
11 @RestController
12 public class UserController implements UserApi {
13
14 @Autowired
15 UserService userService;
16
17 @Override
18 @PostMapping("/upload")
19 public Map uploadPic(@RequestParam("file") MultipartFile file, String username) {
20 return userService.uploadPic(file, username);
21
22 }
23
24
25 }
26
文件上传代码实现部分
这里只写了文件上传的实现,文件的的删除等功能可以通过 storageClient1调用方法实现
实际开发中,根据需要返回的参数和需要存入数据库的参数可通过封装实体类传递信息
service
1 import com.xuecheng.fastdfs.mapper.UserMapper;
2 import org.csource.fastdfs.*;
3 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.stereotype.Service;
5 import org.springframework.web.multipart.MultipartFile;
6
7 import java.io.IOException;
8 import java.util.HashMap;
9 import java.util.Map;
10
11 @Service
12 public class UserService {
13
14 @Autowired
15 UserMapper userMapper;
16
17 public Map uploadPic(MultipartFile file,String username) {
18 Map map = new HashMap();
19 try {
20 //文件id
21 String fileId = fdfs_upload(file);
22 //文件直接存储的url
23 String fileUrl = queryFileUrl(fileId);
24 //将文件的fileId和fileUrl存入数据库,可供后面使用
25 userMapper.saveFileId(username, fileId,fileUrl);
26 map.put(true, fileId);
27 return map;
28 } catch (Exception e) {
29 e.printStackTrace();
30 }
31 map.put(true, "上传失败");
32 return map;
33
34 }
35
36
37
38 public String queryFileUrl(String fileId) {
39 StorageClient1 storageClient1 = getstorageClient1();
40 try {
41 FileInfo fileInfo = storageClient1.query_file_info1(fileId);
42 String sourceIpAddr = fileInfo.getSourceIpAddr();
43 return sourceIpAddr + "/" + fileId;
44 } catch (Exception e) {
45 e.printStackTrace();
46 }
47 return null;
48 }
49
50 //上传文件到fdfs,返回文件id 这里将文件上传的过程抽取了
51 public String fdfs_upload(MultipartFile file) {
52 try {
53
54 StorageClient1 storageClient1 = getstorageClient1();
55 //上传文件
56 //文件字节
57 byte[] bytes = file.getBytes();
58 //文件原始名称
59 String originalFilename = file.getOriginalFilename();
60 //文件扩展名
61 String extName = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
62 //上传文件返回文件id
63 String file1 = storageClient1.upload_file1(bytes, extName, null);
64 //返回文件id
65 return file1;
66 } catch (Exception e) {
67 e.printStackTrace();
68 }
69 return null;
70 }
71
72
73 //获取文件上传对象storageClient1 这里单独将此段代码抽取出来复用
74 public StorageClient1 getstorageClient1() {
75 try {
76 try {
77 //加载fdfs的配置
78 ClientGlobal.initByProperties("fastdfs-client.properties");
79 } catch (IOException e) {
80 throw new RuntimeException("初始化配置文件出错");
81 }
82 //创建tracker client
83 TrackerClient trackerClient = new TrackerClient();
84 //获取trackerServer
85 TrackerServer trackerServer = trackerClient.getConnection();
86 //获取storage
87 StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
88 //创建storage client
89 StorageClient1 storageClient1 = new StorageClient1(trackerServer,storeStorage);
90 return storageClient1;
91 } catch (Exception e) {
92 throw new RuntimeException("初始化StorageClient1出错");
93 }
94 }
95 }
96
上面加载的文件上传的配置文件 fastdfs-client.properties
1 fastdfs.connect_timeout_in_seconds = 5
2 fastdfs.network_timeout_in_seconds = 30
3 fastdfs.charset = UTF-8
4 fastdfs.tracker_servers = 192.168.25.133:22122
5
6 #fastdfs.connect_timeout_in_seconds: http连接超时时间
7 #fastdfs.network_timeout_in_seconds: tracker与storage网络通信超时时间
8 #fastdfs.charset:字符编码
9 #fastdfs.tracker_servers:tracker服务器地址,多个地址中间用英文逗号分隔比如=192.168.25.133:22122,192.168.25.134:22122
持久层根据需要填写,这里做了简单的保存
配置文件application.yml
1 spring:
2 datasource:
3 driver-class-name: com.mysql.jdbc.Driver
4 url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
5 username: root
6 password: dacian821
7
8
9 mybatis:
10 type-aliases-package: com.xuecheng.fastdfs.domain
11 mapper-locations: classpath:mapper/*Mapper.xml
usermaper接口
1 @Mapper
2 public interface UserMapper {
3
4 void saveFileId(String username,String fileId,String fileUrl);
5
6 }
usermaper.xml
1 <?xml version="1.0" encoding="utf-8" ?>
2 /p>
3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
4
5
6
7
8
9 update user set fileId=#{fileId},fileUrl=#{fileUrl} where username=#{username}
10
11
12
fastdfs连接mysql_fastDFS文件上传简单案例相关推荐
- FastDFS 设计理念、文件上传、下载、同步、删除和断点续传原理
一.FastDFS 系统架构和功能原理 1.架构详解 storage server:存储服务器(又称存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上.Storage s ...
- php jquery 实例教程,php jquery 多文件上传简单实例
这篇文章主要介绍了php jquery 多文件上传简单实例,有需要的朋友可以参考一下 代码如下: Upload $(document).ready(function() { var settings ...
- 登峰造极的python requests完成接口文件上传的案例
这篇文章主要介绍了python requests完成接口文件上传的案例,具有很好的参考价值,希望对大家有所帮助.一起跟随北凡过来看看吧 最近在准备一个公开课,主题就是利用不同的语言和不同的工具去实现文 ...
- fastDFS分布式文件系统--文件上传/下载/查询完整代码实现
搭建环境 这里我们使用javaApi测试文件的上传,java版本的fastdfs-client地址在: https://github.com/happyfish100/fastdfs-client-j ...
- SpringBoot集成FastDFS依赖实现文件上传
前言 对FastDFS文件系统安装后的使用. FastDFS的安装请参考这篇:https://www.cnblogs.com/niceyoo/p/13511082.html 本文环境:IDEA + J ...
- aspx 文件上传(简单)
aspx 中轻松实现文件上传 在aspx中实现文件上传是非常容易的,如下代码: private string upLoadFile(System.Web.UI.HtmlControls.HtmlInp ...
- 使用fastDFS客户端改造文件上传
java客户端 余庆先生提供了一个Java客户端,但是作为一个C程序员,写的java代码可想而知.而且已经很久不维护了. 这里推荐一个开源的FastDFS客户端,支持最新的SpringBoot2.0. ...
- html表单调用js文件上传,简单实现js上传文件功能
本文实例为大家分享了js实现上传文件功能的具体代码,供大家参考,具体内容如下 一.用input完成上传,效果图如 选择文件后,提交后出现图片url 二.传输格式采用form-data形式. html代 ...
- SRC挖洞之文件上传/下载漏洞的实战案例
文章目录 前言 任意文件下载 案例1 某OA系统任意文件下载 案例2 某登录页面任意文件下载 案例3 某金融网站任意文件下载 案例4 服务端过滤 ../ 绕过下载 案例5 %00截断后下载任意文件 文 ...
最新文章
- 学电脑从新手到高手_小白如何学手绘插画?新手到高手必学的四套教程【614期】...
- SQL 无限级分类语句
- 解决同一页面中两个iframe互相调用jquery,js函数
- 禁止访问Apache目录
- php pdf 文字水印图片,php如何给pdf加上文字水印和图片水印[未测试]
- vue弹出层滑动禁止背景跟着滑动_vue移动端弹起蒙层滑动禁止底部滑动操作
- 使用Spring Boot Actuator 监控程序运行状态
- Win10进不去系统怎么办? 不重装就能修复系统必备技能
- 洛谷P2024 [NOI2001]食物链
- shell 命令管理tomcat
- 举例说明计算机网络协议,第二章计算机网络协议与体系结构.ppt
- 【动手学深度学习】代码(持续更新)
- python双星号什么运算_Python中的*(星号)和**(双星号)完全详解
- 18个小实例入门SQLServer XML查询
- android实现短信自动转发,利用短信通知的方式在Tasker中实现收到Android手机短信自动转发到微信...
- win10进程太多怎么优化_教你优化Windows7后台进程,让你的电脑启动更快、运行更流畅...
- GOF23设计模式之适配器模式
- 服务器上reportqueue文件夹,删除reportqueue文件夹的操作方法-电脑自学网
- js常见面试题(二)
- 计算机桌面用什么实木板好,实木桌面用什么保护
热门文章
- Java集合 LinkedList的原理及使用
- c语言加减法采用32位运算,单片机C语言求平方根
- java动态创建bean的意义_java相关:Spring Boot如何动态创建Bean示例代码
- java kill信号_kill 命令在Java应用中使用注意事项
- php html url编码,html中url编码是什么?有什么用?
- mqtt js 中乱码_mqtt之上RRPC同步调用实战
- Android开发中StackOverflowError错误实例分析
- WinRAR 5.70 下载、安装和广告弹框去除
- 缺少libtool依赖导致编译安装失败
- matlab红字怎么删除,购买方开具红字信息表如何作账务?