docker安装fastdfs镜像
docker pull morunchang/fastdfs
运行tracker
docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh
运行storage,注意把xxx.xxx.xxx.xxx换成自己的EOS服务器IP
docker run -d --name storage --net=host -e TRACKER_IP=xxx.xxx.xxx.xxx:22122 -e GROUP_NAME= morunchang/fastdfs sh storage.sh
进入storage容器内部
docker exec -it storage /bin/bash
修改nginx配置文件
vi /data/nginx/conf/nginx.conf
添加如下内容
location /group1/M00 {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_cache http-cache;
proxy_cache_valid 200 304 12h;
proxy_cache_key $uri$is_args$args;
proxy_pass http://fdfs_group1;
expires 30d;
}
退出
exit
重启storage
docker restart storage
开启端口号22122,80,23000,注意开启23000
firewall-cmd --zone=public --add-port=22122/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=23000/tcp --permanent
在pom.xml中引入依赖fastDFS的java客户端依赖,使用开源中国的
<dependency>
<groupId>net.oschina.zcx7878groupId>
<artifactId>fastdfs-client-javaartifactId>
<version>1.27.0.0version>
dependency>
在类路径下添加配置文件fdfs_client.conf
connect_timeout=30
network_timeout=60
base_path=/home/fastdfs
#xxx.xxx.xxx.xxx改为自己EOS服务器的ip
tracker_server=xxx.xxx.xxx.xxx:22122
log_level=info
use_connection_pool = false
connection_pool_max_idle_time = 3600
load_fdfs_parameters_from_tracker=false
use_storage_id = false
storage_ids_filename = storage_ids.conf
http.tracker_server_port=80
写一个demo测试使用
package com.lhc.fastdfs.test;
import org.csource.fastdfs.*;
import org.springframework.core.io.ClassPathResource;
public class TestFastDFS {
public static void main(String[] args) throws Exception {
String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();
// 1、加载配置文件,配置文件中的内容就是 tracker 服务的地址。
ClientGlobal.init(filePath);
// 2、创建一个 TrackerClient 对象。直接 new 一个。
TrackerClient trackerClient = new TrackerClient();
// 3、使用 TrackerClient 对象创建连接,获得一个 TrackerServer 对象。
TrackerServer trackerServer = trackerClient.getConnection();
// 4、创建一个 StorageServer 的引用,值为 null
StorageServer storageServer = null;
// 5、创建一个 StorageClient 对象,需要两个参数 TrackerServer 对象、StorageServer 的引用
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
// 6、使用 StorageClient 对象上传图片。
//扩展名不带“.”
String[] strings = storageClient.upload_file("C:\Users\Administrator\Desktop\timg.jpg", "jpg",
null);
// 7、返回数组。包含组名和图片的路径。
for (String string : strings) {
System.out.println(string);
}
}
}
输出
group1
M00/00/00/rBL-lVtN0uKAImXSAAAVnhPk2K8504.png
访问fastDFS文件系统,效果如下,可见已经存储在文件系统中
http://xxx.xxx.xxx.xxx:8080/group1/M00/00/00/rBL-lVtN2OCAJS0UAAE7_YSxmAs135.jpg
使用angular.js上传文件
html的内容如下
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Indextitle>
head>
<script type="text/javascript" src="webjars/angularjs/1.7.2/angular.min.js">script>
<body>
<div ng-app="myApp" ng-controller="myCon">
<input type="file" name="uploadFile" id="uploadFile">
<input type="button" value="upload" ng-click="uploadFile()">
<img src="{{image.url}}" width="200px" height="200px">
div>
body>
<script type="text/javascript" src="userController.js">script>
html>
controller的js如下
var app=angular.module("myApp",[]);
app.controller("myCon",function ($scope,$http) {
$scope.uploadFile=function(){
var formData=new FormData();
var file =document.querySelector("#uploadFile").files[0];
formData.append("file",file);
$http({
method:'POST',
url:'/uploadFile',
data: formData,
headers: {'Content-Type':undefined},
transformRequest: angular.identity
}).then(function successCallback(response) {
$scope.image={};
$scope.image.url = response.data.message;
}, function errorCallback(response) {
// 请求失败执行代码
alert("上传失败")
});
}
})
springboot后台代码如下,其中FastDFSClient,为对fastDFS的客户端的操作代码的封装,大家可以自己封装一下
@RestController
public class UserController {
@Value("${FILE_URL}")
private String FILE_URL;
@RequestMapping("/uploadFile")
public R upload(@RequestParam(value = "file",required = true) MultipartFile file)throws Exception{
String originalFilename = file.getOriginalFilename();
String name = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
FastDFSClient fastDFSClient = new FastDFSClient("classpath:fdfs_client.conf");
String s = fastDFSClient.uploadFile(file.getBytes(), name);
System.out.println(s);
R r = new R();
r.setMessage(FILE_URL+s);
r.setStatus("200");
return r;
}
}