• 简单的文件上传服务器(上传到FastDFS服务器)


    现在文件服务器使用越来越多,其中FastDFS文件服务器非常出色,可以支持分布式存储,多文件系统集群和多主机备份

    环境中使用的文件服务器为172.16.100.10,其中trackerd服务和storaged服务器为同一台主机

    使用到的jar包为官方提供的包,下载地址为https://sourceforge.net/projects/fastdfs/files/?source=navbar

    项目环境:maven项目

    项目目录树

    其中pom.xml的配置

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>uploadServer</groupId>
      <artifactId>uploadServer</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>uploadServer Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.2</version>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.31</version>
        </dependency>
      </dependencies>
      <build>
        <finalName>uploadServer</finalName>
      </build>
    </project>

    web.xml

    <!DOCTYPE web-app PUBLIC
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd" >
    
    <web-app>
      <display-name>Archetype Created Web Application</display-name>
      
    <servlet>
        <servlet-name>uploadServlet</servlet-name>
        <servlet-class>com.uploadServer.servlet.UploadServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>uploadServlet</servlet-name>
        <url-pattern>/upload</url-pattern>
    </servlet-mapping>
    </web-app>

    uploadServer.properties

    ## FastDFSu6587u4EF6u670Du52A1u5668u7684u5730u5740 ##
    imgServerAddress = 172.16.100.10
    ## FastDFSu6587u4EF6u670Du52A1u5668u7684u8BBFu95EEu7AEFu53E3 ##
    imgServerPort = 8090

    fdfs_client.conf

    connect_timeout = 2
    network_timeout = 30
    charset = UTF-8
    http.tracker_http_port = 8090
    http.anti_steal_token = no
    http.secret_key = FastDFS1234567890
    tracker_server=172.16.100.10:22122

    UploadServlet.java

    package com.uploadServer.servlet;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.csource.fastdfs.ClientGlobal;
    import org.csource.fastdfs.StorageClient;
    import org.csource.fastdfs.StorageClient1;
    import org.csource.fastdfs.StorageServer;
    import org.csource.fastdfs.TrackerClient;
    import org.csource.fastdfs.TrackerServer;
    
    import com.alibaba.fastjson.JSON;
    
    /**
     * 功能:上传文件到FastDFS文件服务器,并返回访问链接
     * @author djoker
     *
     */
    public class UploadServlet extends HttpServlet {
    
        private static final long serialVersionUID = 1L;
        
        private TrackerClient trackerClient = null;
        private TrackerServer trackerServer = null;
        private StorageClient storageClient= null;
        private StorageServer storageServer= null;
        private StorageClient1 storageClient1= null;
        private Properties properties = null;
        private InputStream imgServerConf = null;
        
        
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) 
                throws ServletException, IOException {
            
            DiskFileItemFactory factory = new DiskFileItemFactory();
            
            ServletFileUpload upload = new ServletFileUpload(factory);
            
            Map<String, Object> putMap = new HashMap<String, Object>();
            
            try {
                //读取配置文件
                imgServerConf = this.getClass().getClassLoader().getResourceAsStream("uploadServer.properties");
                properties = new Properties();
                properties.load(imgServerConf);
                
                //获取FastDFS客户端的配置文件和初始化环境
                String conf = this.getClass().getClassLoader().getResource("fdfs_client.conf").getPath();
                ClientGlobal.init(conf);
                
                //从request中获取文件
                List<FileItem> items = upload.parseRequest(request);
                //循环文件集合
                int fileNum = 1;
                for(Iterator<FileItem> iter = items.iterator(); iter.hasNext();){
                    FileItem item = iter.next();
                    Map<String, Object> resMap = new HashMap<String, Object>();
                    resMap.put("fileNum", fileNum);
                    if(item.getSize() == 0){
                        resMap.put("code", -1);
                    }else{
                        trackerClient = new TrackerClient();
                        trackerServer = trackerClient.getConnection();
                        storageClient1 = new StorageClient1(trackerServer, storageServer);
                        
                        //上传后返回文件路径参数
                        String[] url = storageClient1.upload_file(item.get(), item.getName().substring(item.getName().indexOf(".") + 1, item.getName().length()), null);
                        
                        //单个文件的返回信息
                        resMap.put("code", 0);
                        resMap.put("imgServerAddress", properties.getProperty("imgServerAddress"));
                        resMap.put("imgServerPort", properties.getProperty("imgServerPort"));
                        resMap.put("groupName", url[0]);
                        resMap.put("imgPath", url[1]);
                        resMap.put("fileName", item.getName());
                        resMap.put("imgUrl", "http://" + properties.getProperty("imgServerAddress") 
                                    + ":" + properties.getProperty("imgServerPort") + "/" + url[0]  + "/" + url[1]);
                    }
                    
                    putMap.put(Integer.toString(fileNum), resMap);
                    fileNum++;
                }
            } catch (FileUploadException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            //输出
            response.getWriter().println(JSON.toJSONString(putMap));
        }
        
    }

    前段jsp页面,upload.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <form action="upload" method="post" enctype="multipart/form-data">
        <input type="file" name="myfile"><br>
        <input type="file" name="myfile"><br>
        <input type="file" name="myfile"><br>
        <button type="submit">submit</button>
    </form>
    </body>
    </html>

    测试:

    向文件服务器上传文件测试,启动项目输入地址http://127.0.0.1/uploadServer/upload.jsp

    选择文件并点击submit开始上传

    返回上传结果

    访问其中的一个连接可以下载

    在linux主机上查看是否删除成功

  • 相关阅读:
    traceroute原理
    IP转发和子网路由
    Dijkstra算法
    String源码学习
    多线程的参数传递
    hbase参数配置优化
    hadoop 点点滴滴(一)
    Win8安装教程!笔记本用U盘安装Win8只需三步
    CentOS 6.4下编译安装MySQL 5.6.14
    Nginx配置文件说明
  • 原文地址:https://www.cnblogs.com/djoker/p/7067420.html
Copyright © 2020-2023  润新知