springboot项目结合fastdfs做文件上传

2023-05-16

    前面一篇博客介绍通过docker构建fastdfs,并且在storage容器中通过fdfs_upload_file命令成功上传了一个文件,最后通过http://ip:8888/group/path访问到了文件,以为这样做就算fastdfs环境搭建成功了。

    不料,通过springboot+fastdfs-client来上传文件却报错了:

    can't create connection to/172.17.0.1:23000

    这个错误的原因是,trackerclient通过我们配置的tracker-list 192.168.197.128:22122 服务来获取storageserver的时候,拿到的是172.17.0.1:23000配置,而这个地址在tracker容器中,是无法访问storage容器中的存储服务的。 

    出错的原因找到了,解决办法其实也能想的到,就是配置storage地址为虚拟机ip地址,而不是docker容器ip地址。 看了很多文章,这里最好用的办法就是在docker容器运行的时候,指定--network=host,表示docker容器与虚拟机共用一个主机地址,这样,也不需要暴露端口了。

    docker容器启动的命令变为这样:

  1. docker run -d --name tracker --network=host delron/fastdfs:latest tracker
  2. docker run -d --name storage --network=host -e TRACKER_SERVER=192.168.197.128:22122 delron/fastdfs:latest storage

    这样搭建的fastdfs就可以给外部上传使用了。

    springboot+fastdfs-client项目配置:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

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

    fastdfs相关配置application.properties:

fdfs.web-server-url=http://192.168.197.128:8888
fdfs.tracker-list[0]=192.168.197.128:22122
fdfs.connect-timeout=60000
fdfs.so-timeout=36000
fdfs.pool.max-total=200
fdfs.pool.max-total-per-key=50
fdfs.pool.max-wait-millis=60000

    上传工具类:

package com.example.undertowtest.utils;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;

@Component
public class FastDFSClientUtil {
    @Value("${fdfs.web-server-url}")
    private String webServerUrl;

    @Autowired
    private FastFileStorageClient fastFileStorageClient;

    public String uploadFile(MultipartFile file) throws IOException{
        StorePath path =fastFileStorageClient.uploadFile((InputStream) file.getInputStream(),file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()),null);
        return webServerUrl + "/" + path.getFullPath();
    }

}

    控制层代码:

package com.example.undertowtest.web;
import com.example.undertowtest.utils.FastDFSClientUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
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 java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@RestController
@RequestMapping("/test")
public class TestController extends  BaseController{


    @Autowired
    private FastDFSClientUtil fastDFSClientUtil;

    @PostMapping("/upload-by-fastdfs")
    public Map<String,Object> uploadByFastDfs(MultipartFile file){
        Map<String,Object> result = new HashMap<>();
        try{
            String groupPath = fastDFSClientUtil.uploadFile(file);
            result.put("path",groupPath);
            result.put("code",200);
            result.put("msg","上传成功");
        }catch (Exception e){
            result.put("code",500);
            result.put("msg","上传失败");
            e.printStackTrace();
        }
        return result;
    }
}

    因为是springboot web项目,所以我还在static目录下整了一个index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>upload</title>
</head>
<body>
     <h2>upload fastdfs test.</h2>
     <form action="/test/upload-by-fastdfs" enctype="multipart/form-data" method="post">
         <div>
            <label>选择文件</label> <input type="file" name="file"/>
         </div>
         <div>
             <input type="submit" value="上传"/>
         </div>
     </form>
</body>
</html>

    启动项目,访问首页,就可以测试上传了。

     springboot结合fastdfs-client做文件上传的示例就介绍完了,代码相对来说比较简洁,上传借助api,两行代码就搞定。主要还是在于docker搭建fastdfs需要注意的地方,采用--network=host的方式最简单。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot项目结合fastdfs做文件上传 的相关文章

  • postgresql导入shp地理文件并用uDig连接postgresql显示地图信息

    postgresql与postgis结合 xff0c 可以很好的支持空间数据库 shp文件可以通过postgis插件安装之后的工具 xff1a PostGIS Boundle 3 for PostgreSQL X64 9 6 Shapefi
  • 快速搭建springboot+mybatis+postgresql开发环境

    这里 xff0c 利用eclipse或者idea提供的springboot项目创建向导 xff0c 不用去找依赖 普通的eclipse需要安装spring插件 可以直接使用sts版本 全称是Spring Tools Suite 在eclip
  • mysql创建hash索引

    mysql支持的存储引擎与索引结构对照表如下 xff1a Storage Engine Permissible Index Types InnoDBBTREEMyISAMBTREEMEMORY HEAPHASH BTREENDBHASH B
  • docker搭建hbase环境

    hbase是hadoop生态中的一员 xff0c 最早搭建hbase xff0c 需要先安装hadoop xff0c 然后安装zookeeper xff0c 再安装hbase 现在通过docker可以直接安装hbase xff0c 而且容器
  • 使用c语言库asn1c对asn文件格式实现编解码

    针对asn文件编解码工作 xff0c asn1c这个开源工具对c c 43 43 的支持非常好 可以很方便的安装和使用 xff0c 目前这个工具是开源的 xff0c 最新版本是0 9 28 xff0c 项目地址 xff1a github c
  • ubuntu20.04版本安装gcc-4.8

    ubuntu20 04版本默认已经将gcc支持的版本更新到了gcc 9 xff0c 如果要降级gcc的版本 xff0c 需要设置新的源 xff0c 然后安装指定版本 xff0c 思路就是这样 可以看到如下这个图片 xff0c 4 8版本对应
  • WinRAR(去广告)中文繁体

    win10系统中 xff0c 如果没有winrar xff0c 可以使用本文提到的这个工具 xff0c 中文繁体 xff0c 不带广告 下载地址 xff1a tools 各种简单的工具 工具放在csdn xff0c 需要积分 xff0c 这
  • 单片机仿真软件proteus8安装与使用

    最近对Arduino 阿德伟诺 微控制器有点兴趣 xff0c 在学习的过程中 xff0c 如果我们没有机器 xff0c 其实可以通过仿真软件来模拟 xff0c 而proteus这个工具就非常适合单片机仿真 为此 xff0c proteus的
  • proteus电路仿真设计图中很多器件之间没有实线连线,它们是怎么实现的?

    如题所示 xff0c 在proteus电路仿真设计图中 xff0c 我们发现 xff0c 电子元器件之间 xff0c 很多时候并没有实线连接 xff0c 但是他们却可以工作 对于新手的我们 xff0c 可能觉着很奇怪 xff0c 独立的器件
  • 七段数码管显示原理研究

    在51单片机学习过程中 xff0c 相对基础的一个实验就是利用七段数码管依次显示数字0 9 很多时候 xff0c 我们按照要求 xff0c 搭建了电路 xff0c 编写了对应的显示控制程序 xff0c 最后运行 xff0c 可能对于七段数码
  • Cloudkitty – OpenStack计费服务

    https mp weixin qq com s biz 61 MzU0NDEyODkzMQ 61 61 amp mid 61 2247494964 amp idx 61 1 amp sn 61 259f86891d8e7bc07debd3
  • 51单片机c语言开发工具keil安装

    单片机分好几种 xff0c 常见的51单片机开发需要安装keil对应c51版本 xff0c 不能安装成了mdk版本 这个需要注意 目前 xff0c 比较好的工具 xff0c windows下自然是keil了 但是它是收费的 xff0c 只能
  • 仿真软件proteus构建LCD1602显示字符串实验

    LCD1602模块的显示需要注意几点 xff1a 1 显示两行 xff0c 第一行的起始地址是0x80 xff0c 第二行的地址是0x80 43 0x40 61 0xC0 2 RS RW EN接线没有说一定要接到P1 P2 P3上 xff0
  • 仿真软件proteus点亮led实验

    在这个实验之前 xff0c 确保系统已经正确安装了proteus和keil工具 proteus是用来设计电路图的 xff0c keil是用来编写c语言代码并编译成芯片可用的hex程序的 前面安装keil的时候 xff0c 最后提到 xff0
  • 仿真软件proteus构建七段数码管显示数字0-9实验

    七段数码管显示原理研究在前一篇博客中已经阐述过 xff0c 就是利用7个数码管构建一个 8 字形 xff0c 然后利用数字的形状特点 xff0c 依次点亮某一些段 xff0c 就可以显示数字了 七段数码管显示数字还是二极管发光原理的利用 这
  • 仿真软件proteus构建LCD1602四线驱动实验

    默认的LCD1602都是8线驱动 xff0c 数据口D0 D7都要接线 xff0c 这种方式对于写数据而言 xff0c 很方便 xff0c 不需要考虑太多 但是因为要的数据线过多 xff0c 在实际布线过程中 xff0c 可能会考虑使用四线
  • 液晶显示屏LCD1602直连STC89C52RC单片机程序

    我买的普中 2单片机类型开发板 xff0c 单片机自带有一排插槽 xff0c 是留给LCD1602显示用的 虽然这个插槽正好可以连接上LCD1602 xff0c 但是因为他的引脚特殊性 xff0c 有三个引脚 xff0c RW RS EN需
  • 记录一次单片机芯片插反通电故障

    昨天晚上在家里捣鼓单片机最小系统 xff0c 把开发板上的芯片从卡座上拆下来 xff0c 然后放在面包板上diy最小系统 xff0c 后来放回去 但是我只记着芯片有缺口的地方朝上 xff0c 并没有记住它从卡座上卸载下来的方向 xff0c
  • mac系统安装win10双系统

    一个月前 xff0c 为了在家里学习单片机 xff0c 在mac book air系统基础上 xff0c 安装了win10 xff0c 搞了一个双系统 在安装之前 xff0c 看了很多资料 xff0c 基本上提到两点 xff0c 一个是准备
  • 谐振电路应用之LED交替闪烁

    谐振电路主要利用三极管特性 xff0c 让电路持续交替出现高低电平的现象 xff0c 根据这个特点 xff0c 可以制作LED交替闪烁的效果 谐振电路图如下所示 xff1a 根据这个图 xff0c 可以很方便的利用三极管 xff0c 电阻

随机推荐

  • Python基础-TypeError:takes 2 positional arguments but 3 were given

    Error xff1a 今天写一段简单类定义python代码所遇到报错问题 xff1a TypeError drive takes 2 positional arguments but 3 were given 代码如下 class Car
  • node使用netcat依赖库做socket编程

    node编程里面 xff0c 默认有一个net库可以做socket编程 xff0c 这里要说的是netcat这个库 xff0c 思路都是一样的 xff0c 甚至代码逻辑都很像 netcat可以支持tcp udp xff0c 同时很方便的构造
  • 荔枝派nano初体验-windows写入镜像到TF卡启动

    荔枝派nano是一个很小的系统 xff0c 搭载全志F1C100S芯片 xff0c 具有ddr内存 xff0c 支持tf flash启动 本人在了解荔枝派的特点之后 xff0c 在淘宝上找到了一个57块钱的荔枝派nano xff0c 一般价
  • linux下socket编程中setsockopt的作用

    如题所示 xff0c 在linux进行socket编程的时候 xff0c 一般而言 xff0c socket bind listen三步曲之后 xff0c 就开始接收客户端请求 xff0c 然后实现收发数据 如下所示的代码 xff0c 是没
  • 悲观锁与乐观锁以及如何用java语言和mysql实现

    悲观锁 xff0c 乐观锁跟字面意思一样 xff0c 悲观锁认为在多线程场景下 xff0c 不一定能够获取资源 xff0c 所以要先获取锁 xff0c 再做相关业务 xff0c 保证不会发生冲突 乐观锁认为多线程场景下 xff0c 不会发生
  • opencv结合微信二维码识别功能实现图片二维码识别

    opencv本身有二维码识别功能 xff0c 但是识别效果不是很好 xff0c 它对二维码图片要求较高 xff0c 虽然可以有图片处理 xff0c 甚至抠出二维码区域 xff0c 但是整体识别与微信二维码识别功能还是有差距的 微信二维码识别
  • opencv for java给图片添加水印中文问题

    opencv提供的给图片添加文字的方法Imgproc putText 可以给图片添加文字 xff0c 最后类似一个添加水印的效果 xff0c 但是这个方法对中文支持不好 xff0c 在没有字体支持的情况下 xff0c 默认中文显示 如下图所
  • springboot文件上传大小限制设置

    一般的web系统基本都会有文件上传功能 xff0c 文件上传必然涉及到一个问题 xff0c 就是文件大小 xff0c 太大的文件不仅传输速度慢 xff0c 而且对服务器压力巨大 xff0c 后期的下载和保存都是一种考验 所以有了文件大小限制
  • springboot打包后资源文件读取问题

    springboot项目打包之后 xff0c 将所有依赖都打入jar包 xff0c 同时也将系统中要使用的一些资源文件也会打进来 xff0c 之后运行这个jar包 xff0c 里面包含的资源文件不能再像文件系统那样直接在classpath下
  • navicat导入外部数据到mysql中文乱码以及日期格式问题

    最近在使用navicat导入外部数据到mysql中总结了以下几个问题 xff1a 1 中文乱码 xff0c 这个是因为数据在csv或者excel中格式是ANSI 格式 比如csv的数据内容如下 xff1a 在导入向导这里就乱码了 xff1a
  • opencv for java实现人脸检测

    opencv是一个很优秀的图像处理框架 xff0c 可以通过源码编译 xff0c 让他支持java开发 xff0c 这里如果在windows下开发 xff0c 可以直接使用opencv 453 jar和opencv java452 dll动
  • 网络测试工具netperf

    一般我们进行网络测试 xff0c 主要是测试网络的连通性 网络带宽 网络响应时间等 常用的工具包括ping traceroute telnet ftp等 如测试网络连通性 xff0c 可以使用ping xff0c traceroute xf
  • mybatis使用collection嵌套查询

    在开发中 xff0c 可能会遇到一对多的关系 xff0c 这个时候 xff0c 一条sql语句就难以胜任这个任务了 只能先执行一条sql xff0c 然后根据返回的结果 xff0c 再做一次sql关联查询 xff0c 这个时候 xff0c
  • java通过流读取图片做base64编码

    在web页面上 xff0c 显示图片 xff0c 一般是给出图片地址 xff0c 然后以url的方式显示 xff0c 但是有一些特殊情况 xff0c 如果我们的图片保存在ftp服务器上 xff0c 不能外部轻易访问 xff0c 但是可以通过
  • tesseract-ocr+java实现图片文字识别

    ocr是Optical Character Recognition的简写 xff0c 就是光学字符识别技术 主要是对包含文本资料的图片进行识别 xff0c 获取文本信息的技术 目前tesseract ocr这个工具可以很方便的在Window
  • mysql使用join做update操纵与使用join做查询时出现重复记录的问题

    在实际处理数据过程中 xff0c 有一些数据可能会从别的地方导入过来 xff0c 两个表有关联 xff0c 但是一个表中的某一列缺失 xff0c 如果要补全 xff0c 可以利用另一个表来做填充 这里就是今天的第一个问题 xff0c 使用u
  • mac系统上通过源码编译安装opencv for java

    本人在Mac系统上尝试下载opencv源码 xff0c 然后通过cmake make make install命令编译安装 xff0c 都失败 xff0c 各种依赖缺失报错 最后通过brew install build from sourc
  • vmware安装苹果虚拟机卡在苹果图标位置不动

    计算机环境 xff1a vmware16 2 xff0c win11 xff0c macos 12 monterey xff0c macos majave 如题所示 xff0c 在vmware里面安装苹果虚拟机 xff0c 通过unlock
  • docker搭建fastdfs环境

    fastdfs是一个开源的分布式文件系统 xff0c 在实际使用中 xff0c 通过源码编译安装过程非常复杂 xff0c 但是通过docker快速构建却非常容易 下面介绍通过docker安装fastdfs的方法 docker镜像的选择也挺重
  • springboot项目结合fastdfs做文件上传

    前面一篇博客介绍通过docker构建fastdfs xff0c 并且在storage容器中通过fdfs upload file命令成功上传了一个文件 xff0c 最后通过http ip 8888 group path访问到了文件 xff0c