FastDFS整合Nginx安装与使用

创建FastDFS文件夹并上传软件

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

安装所需要的环境依赖

在这里插入图片描述

解压编译安装libfastcommon

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

安装FastDFS本体

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将conf下的所有配置文件拷贝到/etc/fdfs下
在这里插入图片描述
以上是安装的是在node1机器上(tracker), 在node2机器(storage)重复上面的操作.

修改tracker配置文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建base_path所制定的文件夹
在这里插入图片描述

启动tracker服务

在这里插入图片描述

配置storage

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

启动storage

在这里插入图片描述

上传文件测试

在/home下放一张imooc.png图片,然后执行
在这里插入图片描述
如果看到下面图片的信息表示上传成功了
在这里插入图片描述

安装fastdfs-nginx模块

在node2节点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
把/usr/local/include的local去除
在这里插入图片描述
在这里插入图片描述

安装Nginx

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
./configure
–prefix=/usr/local/nginx
–pid-path=/var/run/nginx/nginx.pid
–lock-path=/var/lock/nginx.lock
–error-log-path=/var/log/nginx/error.log
–http-log-path=/var/log/nginx/access.log
–with-http_gzip_static_module
–http-client-body-temp-path=/var/temp/nginx/client
–http-proxy-temp-path=/var/temp/nginx/proxy
–http-fastcgi-temp-path=/var/temp/nginx/fastcgi
–http-uwsgi-temp-path=/var/temp/nginx/uwsgi
–http-scgi-temp-path=/var/temp/nginx/scgi
–add-module=/usr/local/src/FastDFS/fastdfs-nginx-module-1.22/src
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

启动Nginx

在这里插入图片描述
此时 访问http://192.168.174.129:8888/imooc/M00/00/00/wKiugWLNDyKALsnEAAucnpyATjI502_big.png
就能访问到之前上传的imooc.png图片了

整合SpringBoot项目实战

controller

@RestController
@RequestMapping("fdfs")
public class CenterUserController extends BaseController {

    @Autowired
    private FileResource fileResource;

    @Autowired
    private CenterUserService centerUserService;

    @Autowired
    private FdfsService fdfsService;

    @PostMapping("uploadFace")
    public IMOOCJSONResult uploadFace(
            String userId,
            MultipartFile file,
            HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        String path = "";
        // 开始文件上传
        if (file != null) {
            // 获得文件上传的文件名称
            String fileName = file.getOriginalFilename();
            if (StringUtils.isNotBlank(fileName)) {

                // 文件重命名  imooc-face.png -> ["imooc-face", "png"]
                String fileNameArr[] = fileName.split("\\.");

                // 获取文件的后缀名
                String suffix = fileNameArr[fileNameArr.length - 1];

                if (!suffix.equalsIgnoreCase("png") &&
                        !suffix.equalsIgnoreCase("jpg") &&
                        !suffix.equalsIgnoreCase("jpeg") ) {
                    return IMOOCJSONResult.errorMsg("图片格式不正确!");
                }
                path = fdfsService.upload(file, suffix); // 使用FastDFS
//                path = fdfsService.uploadOSS(file, userId, suffix); // 使用阿里云存储OSS
                System.out.println(path);
            }
        } else {
            return IMOOCJSONResult.errorMsg("文件不能为空!");
        }

        if (StringUtils.isNotBlank(path)) {
            String finalUserFaceUrl = fileResource.getHost() + path; // 使用FastDFS
//            String finalUserFaceUrl = fileResource.getOssHost() + path; // 使用阿里云存储OSS
            // 将图片的URL存储到user表中
            Users userResult = centerUserService.updateUserFace(userId, finalUserFaceUrl);
            UsersVO usersVO = conventUsersVO(userResult);
            CookieUtils.setCookie(request, response, "user",
                    JsonUtils.objectToJson(usersVO), true);
        } else {
            return IMOOCJSONResult.errorMsg("上传头像失败");
        }

        return IMOOCJSONResult.ok();
    }

}

FileResource

@Component
@PropertySource("classpath:file.properties")
@ConfigurationProperties(prefix = "file")
public class FileResource {

    private String host;

    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
    private String objectName;
    private String ossHost;

    public String getOssHost() {
        return ossHost;
    }

    public void setOssHost(String ossHost) {
        this.ossHost = ossHost;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getEndpoint() {
        return endpoint;
    }

    public void setEndpoint(String endpoint) {
        this.endpoint = endpoint;
    }

    public String getAccessKeyId() {
        return accessKeyId;
    }

    public void setAccessKeyId(String accessKeyId) {
        this.accessKeyId = accessKeyId;
    }

    public String getAccessKeySecret() {
        return accessKeySecret;
    }

    public void setAccessKeySecret(String accessKeySecret) {
        this.accessKeySecret = accessKeySecret;
    }

    public String getBucketName() {
        return bucketName;
    }

    public void setBucketName(String bucketName) {
        this.bucketName = bucketName;
    }

    public String getObjectName() {
        return objectName;
    }

    public void setObjectName(String objectName) {
        this.objectName = objectName;
    }
}

file.properties
在这里插入图片描述
centerUserService.updateUserFace
在这里插入图片描述
FdfsServiceImpl

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.imooc.resourse.FileResource;
import com.imooc.service.FdfsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;

@Service
public class FdfsServiceImpl implements FdfsService {

    @Autowired
    private FastFileStorageClient fastFileStorageClient;

    @Autowired
    private FileResource fileResource;

    @Override
    public String upload(MultipartFile file, String fileExtName) throws Exception {

        StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(),
                                file.getSize(),
                                fileExtName,
                                null);

        String path = storePath.getFullPath();

        return path;
    }

    @Override
    public String uploadOSS(MultipartFile file, String userId, String fileExtName) throws Exception {

        // 构建ossClient
        OSS ossClient = new OSSClientBuilder()
                .build(fileResource.getEndpoint(),
                        fileResource.getAccessKeyId(),
                        fileResource.getAccessKeySecret());

        InputStream inputStream = file.getInputStream();

        // 文件上传路径构建
        String myObjectName = fileResource.getObjectName() + "/" + userId + "/" + userId + "." + fileExtName;

        ossClient.putObject(fileResource.getBucketName(), myObjectName, inputStream);
        ossClient.shutdown();

        return myObjectName;
    }
}

效果测试

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
FastDFS 是一个开源的轻量级分布式文件系统,它可以提供高性能的文件存储和访问服务。而 Nginx 是一个高性能的 Web 服务器和反向代理服务器,它可以用来加速静态文件的访问和负载均衡。 将 FastDFS 整合Nginx 中,可以通过 Nginx 提供的访问控制和负载均衡机制,提高 FastDFS 的性能和可靠性。 以下是 FastDFS 整合 Nginx 的步骤: 1. 安装 FastDFSNginx安装 FastDFSNginx 之前,需要确保系统已经安装了 libfastcommon 和 pcre 库。 安装 FastDFS 包括 tracker 和 storage 两个组件,可以通过以下命令进行安装: ``` wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz tar -zxvf V5.11.tar.gz cd fastdfs-5.11/ ./make.sh ./make.sh install ``` 安装 Nginx 可以通过以下命令进行安装: ``` wget https://nginx.org/download/nginx-1.20.0.tar.gz tar -zxvf nginx-1.20.0.tar.gz cd nginx-1.20.0/ ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module make make install ``` 2. 配置 FastDFS 配置 FastDFS 的时候,需要修改 tracker 和 storage 的配置文件,使其能够正常工作。 tracker 的配置文件路径为 /etc/fdfs/tracker.conf,可以通过以下命令进行修改: ``` vi /etc/fdfs/tracker.conf ``` 修改 tracker_server 配置项,将其设置为本机IP地址,例如: ``` tracker_server=192.168.1.100:22122 ``` storage 的配置文件路径为 /etc/fdfs/storage.conf,可以通过以下命令进行修改: ``` vi /etc/fdfs/storage.conf ``` 修改 tracker_server、store_path0 和 base_path 配置项,将其设置为本机IP地址和存储路径,例如: ``` tracker_server=192.168.1.100:22122 store_path0=/data/fastdfs/storage base_path=/data/fastdfs ``` 3. 配置 Nginx 配置 Nginx 的时候,需要修改 nginx.conf 配置文件,使其能够正常工作。 nginx.conf 的路径为 /usr/local/nginx/conf/nginx.conf,可以通过以下命令进行修改: ``` vi /usr/local/nginx/conf/nginx.conf ``` 在 http 配置段中添加以下配置: ``` http { ... # fastdfs 配置 fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; fastcgi_intercept_errors on; fastcgi_pass_header Server; fastcgi_hide_header X-Powered-By; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # fastdfs 分组和文件id参数 fastcgi_param FILE_GROUP $arg_group_name; fastcgi_param FILE_ID $arg_file_id; # fastdfs 路径 fastcgi_param FASTCGI_SCRIPT_NAME /fastdfs; fastcgi_param FASTCGI_DOCUMENT_ROOT /usr/local/nginx/html; } ``` 在 server 配置段中添加以下配置: ``` server { ... location /group1/M00 { ngx_fastdfs_module; } } ``` 其中,/group1/M00 是 FastDFS 中默认的组名和存储路径,可以根据实际情况进行修改。 4. 启动 FastDFSNginx 启动 FastDFSNginx 可以通过以下命令进行启动: ``` /etc/init.d/fdfs_trackerd start # 启动 tracker /etc/init.d/fdfs_storaged start # 启动 storage /usr/local/nginx/sbin/nginx # 启动 nginx ``` 启动成功后,可以通过访问 http://localhost/group1/M00/test.jpg 来测试是否能够正常访问 FastDFS 中的文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sunny_yiyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值