FastDFS(四)玩个案例练练手

FastDFS(四)玩个案例练练手

搭建图片服务器

Nginx模块安装 (Storage)

tar -zxvf fastdfs-nginx-module_v1.16.tar.gz

修改 config 文件,将文件中的 /usr/local/ 路径改为 /usr/

ngx_addon_name=ngx_http_fastdfs_module
HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"

修改 mod_fastdfs.conf

base_path=/home/fastdfs
tracker_server=IP:22122
#(n个tracker配置n行)
#tracker_server=10.1.220.x:22122
#url中包含group名称
url_have_group_name=true   
#指定文件存储路径(上面配置的store路径)
store_path0=/home/fastdfs/fdfs_storage 

将 libfdfsclient.so 拷贝至 /usr/lib 下

cp /usr/lib64/libfdfsclient.so /usr/lib/

创建nginx/client目录

mkdir -p /var/temp/nginx/client

Nginx安装 (Tracker)

进入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/fastdfs-nginx-module/src

注意:上边将临时文件目录指定为 /var/temp/nginx,需要在 /var 下创建 temp 及 nginx 目录:mkdir /var/temp/nginx

编译:make

安装:make install

拷贝配置文件

cd /opt/FastDFS/conf
cp http.conf mime.types /etc/fdfs/
是否覆盖:yes

修改nginx配置文件

cd /usr/local/nginx/conf/
vim nginx.conf
server {
    
    
 listen    80;
 server_name IP;
 #charset koi8-r;
 #access_log logs/host.access.log main;
 location /group1/M00 {
    
    
   root  /home/fastdfs/fdfs_storage/data;
   ngx_fastdfs_module;
 }

关闭nginx,并启动nginx

pkill -9 nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

搭建web服务

<packaging>war</packaging>
<dependencies>
    <!-- 因为有jsp页面,所以引用servlet依赖-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <scope>provided</scope>
        <version>2.5</version>
    </dependency>
    <!-- 页面提交过来的请求,使用springmvc来处理-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.7.RELEASE</version>
    </dependency>
    <!-- java连接fastDFS的客户端工具-->
    <dependency>
        <groupId>net.oschina.zcx7878</groupId>
        <artifactId>fastdfs-client-java</artifactId>
        <version>1.27.0.0</version>
    </dependency>
    <!-- 图片上传到FastDFS需要用的到IO工具-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-io</artifactId>
        <version>1.3.2</version>
    </dependency>
    <!-- 图片保存到web服务器需要用到的IO工具-->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.1</version>
    </dependency>
    <!--用来转换java对象和json字符串,注意,2.7以上版本必须搭配spring5.0以上-->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.8</version>
    </dependency>
</dependencies>
<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="fname">
    <br>
    <button>提交</button>
</form>
<servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/spring-mvc.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<!--扫描注解包-->
<context:component-scan base-package="com.szx.controller"></context:component-scan>

<!--扫描控制器中的注解-->
<mvc:annotation-driven></mvc:annotation-driven>

<!--上传文件的解析器,规定上传文件的大小限制-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--限制上传文件最大 2G -->
    <property name="maxUploadSize" value="2048000000"></property>
</bean>
##fastdfs-client.properties
fastdfs.connect_timeout_in_seconds = 5
fastdfs.network_timeout_in_seconds = 30
fastdfs.charset = UTF-8
fastdfs.http_anti_steal_token = false
fastdfs.http_secret_key = FastDFS1234567890
fastdfs.http_tracker_http_port = 80
fastdfs.tracker_servers = 106.75.245.83:22122
public class FlieSystem implements Serializable {
    
    
    private String filrId;
    private String filePath;
    private String fileName;

    public FlieSystem() {
    
    
    }

    public FlieSystem(String filrId, String filePath, String fileName) {
    
    
        this.filrId = filrId;
        this.filePath = filePath;
        this.fileName = fileName;
    }

    public String getFilrId() {
    
    
        return filrId;
    }

    public void setFilrId(String filrId) {
    
    
        this.filrId = filrId;
    }

    public String getFilePath() {
    
    
        return filePath;
    }

    public void setFilePath(String filePath) {
    
    
        this.filePath = filePath;
    }

    public String getFileName() {
    
    
        return fileName;
    }

    public void setFileName(String fileName) {
    
    
        this.fileName = fileName;
    }

    @Override
    public String toString() {
    
    
        return "FlieSystem{" +
                "filrId='" + filrId + '\'' +
                ", filePath='" + filePath + '\'' +
                ", fileName='" + fileName + '\'' +
                '}';
    }
}
@Controller
public class FileAction {
    
    

    /**
     * MultipartHttpServletRequest:是HttpServletRequest的强化版,不仅可以装文本,还以装文件图片信息
     * @param request
     * @return 上传文件对象的json对象
     * @throws Exception
     * 上传流程:
     *      先把文件保存在web服务器
     *      在从web服务器上将文件上传到FastDFS上
     */
    @RequestMapping("upload")
    @ResponseBody
    public FlieSystem upload(MultipartHttpServletRequest request) throws Exception{
    
    

        //自定义返回实体类
        FlieSystem fileSystem = new FlieSystem();
        //在页面请求中获取上传文件对象
        MultipartFile file = request.getFile("fname");
        //获取文件原始名
        String oldFileName = file.getOriginalFilename();
        //获取后缀名
        String hou = oldFileName.substring(oldFileName.lastIndexOf(".") + 1);
        //创建新的文件名
        String newFileName = UUID.randomUUID().toString() + "." + hou;
        //创建web服务器保存文件的目录
        File toSaveFile = new File("E:\\upload\\" + newFileName);
        //将路径转换成文件
        file.transferTo(toSaveFile);
        //获取服务器绝对路径
        String newFilePath = toSaveFile.getAbsolutePath();

        //加载配置文件
        ClientGlobal.initByProperties("config/fastdfs-client.properties");
        //创建tracker客户端
        TrackerClient trackerClient = new TrackerClient();
        //通过客户端获取tracker的连接服务并返回
        TrackerServer trackerServer = trackerClient.getConnection();
        //声明storage服务
        StorageServer storageServer = null;
        //定义storage客户端
        StorageClient1 client = new StorageClient1(trackerServer, storageServer);
        //获取元信息
        NameValuePair[] list = new NameValuePair[1];
        list[0] = new NameValuePair("fileName",oldFileName);
        //上传
        String fileId = client.upload_appender_file1(newFilePath, hou, list);
        //关闭流
        trackerServer.close();

        //封装返回数据
        fileSystem.setFilrId(fileId);
        fileSystem.setFileName(oldFileName);
        //已经上传到fastDFS,通过fileId来访问图片
        fileSystem.setFilePath(fileId);

        return fileSystem;
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_49741990/article/details/113049591