记一次docker安装fastDFS

1|0记一次docker安装fastDFS

fastdfs的介绍

1|1一 拉取镜像

docker pull delron/fastdfs

1|2二 启动fastdfs

1|0启动两个服务

首先说一下fastDFS 的架构问题:

fastDFS包括两个容器:

  1. tracker容器,用来追踪文件的,起到调度作用。我们可以理解成文件的索引
  2. storage容器,用来存储文件的。
## 启动tracker容器 docker run -dti --network=host --name tracker -v /upload/fdfs/tracker:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs tracker ## 启动storage 容器 ocker run -dti --network=host --name storage -e TRACKER_SERVER=192.168.227.100:22122 -v /upload/fdfs/storage:/var/fdfs -v /etc/localtime:/etc/localtime delron/fastdfs storage

以上两个容器的启动,注意参数和挂在的目录,

其中,storage要需要tracker_server 的参数,该参数指向tracker容器的服务地址。tracker 的默认端口是22122,storage的默认端口是8888。

1|0修改storage配置文件

#进入容器 docker exec -it storage bash #进入目录 cd /etc/fdfs/ #编辑文件 vi storage.conf ## 如下图所示,在配置文件的最后一行可以改端口

image-20220421201535827

1|0修改nginx的配置文件

*** 这里我们添加一个配置文件***

server { listen 8888; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location /static { root /usr/share/nginx/html; } location ~/group[0-9]/ { ngx_fastdfs_module; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }

image-20220421201928430

修改完文件需要重启nginx

1|3三 上传一个文件测试一下

docker exec -it storage bash cd /var/fdfs echo hello hello fastdfs 许珂>a.txt ## 把文件存到fastdfs的命令。后面是有/etc/fdfs/client.conf (配置文件的地址) /usr/bin/fdfs_upload_file /etc/fdfs/client.conf a.txt # 上传成功后会返回一个地址,我们可以用这个地址就可以访问到文件

image-20220421202509080

访问格式:http://ip:port/文件地址,例如下面的例子

http://192.168.227.100:8888/group1/M00/00/00/wKjjZGJhRFWAG2P-AAAAFdBqtMs178.txt

image-20220421202747049

至此,安装告一段落。截下来开始用java来操作。

1|4四 java 操作

官方sdk

1|0原生

1|0springboot

1|0配置文件

server: port: 5200 ip: 192.168.227.100 fdfs: so-timeout: 1501 connect-timeout: 601 thumb-image: width: 150 height: 150 tracker-list: - ${ip}:22122 web-server-url: http://${ip}:8888/

注意:

配置文件上我们定义了一个ip的变量,然后再tracker-list和web-server-url中引用了它

import com.github.tobato.fastdfs.domain.conn.FdfsWebServer; import com.github.tobato.fastdfs.domain.fdfs.StorePath; import com.github.tobato.fastdfs.domain.proto.storage.DownloadByteArray; import com.github.tobato.fastdfs.exception.FdfsUnsupportStorePathException; import com.github.tobato.fastdfs.service.FastFileStorageClient; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.charset.Charset; @Component public class FastDFSClient {     @Autowired     private FastFileStorageClient storageClient;     @Autowired     private FdfsWebServer fdfsWebServer;     /**      * 上传文件      * @param file 文件对象      * @return 文件访问地址      * @throws IOException      */     public String uploadFile(MultipartFile file) throws IOException {         StorePath storePath = storageClient.uploadFile(file.getInputStream(),file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()),null);         return getResAccessUrl(storePath);     }     /**      * 上传文件      * @param file 文件对象      * @return 文件访问地址      * @throws IOException      */     public String uploadFile(File file) throws IOException {         FileInputStream inputStream = new FileInputStream (file);         StorePath storePath = storageClient.uploadFile(inputStream,file.length(), FilenameUtils.getExtension(file.getName()),null);         return getResAccessUrl(storePath);     }     /**      * 将一段字符串生成一个文件上传      * @param content 文件内容      * @param fileExtension      * @return      */     public String uploadFile(String content, String fileExtension) {         byte[] buff = content.getBytes(Charset.forName("UTF-8"));         ByteArrayInputStream stream = new ByteArrayInputStream(buff);         StorePath storePath = storageClient.uploadFile(stream,buff.length, fileExtension,null);         return getResAccessUrl(storePath);     }     /**      * 封装图片完整URL地址       */     private String getResAccessUrl(StorePath storePath) {         String fileUrl = fdfsWebServer.getWebServerUrl() + storePath.getFullPath();         return fileUrl;     }     /**      * 删除文件      * @param fileUrl 文件访问地址      * @return      */     public void deleteFile(String fileUrl) {         if (StringUtils.isEmpty(fileUrl)) {             return;         }         try {             StorePath storePath = StorePath.parseFromUrl(fileUrl);             storageClient.deleteFile(storePath.getGroup(), storePath.getPath());         } catch (FdfsUnsupportStorePathException e) {             System.out.println(e.getMessage());             /** TODO 只是测试,所以未使用,logger,正式环境请修改打印方式 **/         }     }     /**      * 下载文件      *      * @param fileUrl 文件URL      * @return 文件字节      * @throws IOException      */     public byte[] downloadFile(String fileUrl) throws IOException {         String group = fileUrl.substring(0, fileUrl.indexOf("/"));         String path = fileUrl.substring(fileUrl.indexOf("/") + 1);         DownloadByteArray downloadByteArray = new DownloadByteArray();         byte[] bytes = storageClient.downloadFile(group, path, downloadByteArray);         return bytes;     } }

__EOF__

本文作者Prince丶prayK
本文链接https://www.cnblogs.com/love-xk/p/16523478.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Prince丶prayK  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示