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

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

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

项目环境:maven项目

项目目录树

其中pom.xml的配置

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>uploadServer</groupId>
  5. <artifactId>uploadServer</artifactId>
  6. <packaging>war</packaging>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>uploadServer Maven Webapp</name>
  9. <url>http://maven.apache.org</url>
  10. <dependencies>
  11. <dependency>
  12. <groupId>junit</groupId>
  13. <artifactId>junit</artifactId>
  14. <version>3.8.1</version>
  15. <scope>test</scope>
  16. </dependency>
  17.  
  18. <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
  19. <dependency>
  20. <groupId>commons-fileupload</groupId>
  21. <artifactId>commons-fileupload</artifactId>
  22. <version>1.3.2</version>
  23. </dependency>
  24.  
  25. <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
  26. <dependency>
  27. <groupId>com.alibaba</groupId>
  28. <artifactId>fastjson</artifactId>
  29. <version>1.2.31</version>
  30. </dependency>
  31. </dependencies>
  32. <build>
  33. <finalName>uploadServer</finalName>
  34. </build>
  35. </project>

web.xml

  1. <!DOCTYPE web-app PUBLIC
  2. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  3. "http://java.sun.com/dtd/web-app_2_3.dtd" >
  4.  
  5. <web-app>
  6. <display-name>Archetype Created Web Application</display-name>
  7.  
  8. <servlet>
  9. <servlet-name>uploadServlet</servlet-name>
  10. <servlet-class>com.uploadServer.servlet.UploadServlet</servlet-class>
  11. </servlet>
  12.  
  13. <servlet-mapping>
  14. <servlet-name>uploadServlet</servlet-name>
  15. <url-pattern>/upload</url-pattern>
  16. </servlet-mapping>
  17. </web-app>

uploadServer.properties

  1. ## FastDFS\u6587\u4EF6\u670D\u52A1\u5668\u7684\u5730\u5740 ##
  2. imgServerAddress = 172.16.100.10
  3. ## FastDFS\u6587\u4EF6\u670D\u52A1\u5668\u7684\u8BBF\u95EE\u7AEF\u53E3 ##
  4. imgServerPort = 8090

fdfs_client.conf

  1. connect_timeout = 2
  2. network_timeout = 30
  3. charset = UTF-8
  4. http.tracker_http_port = 8090
  5. http.anti_steal_token = no
  6. http.secret_key = FastDFS1234567890
  7. tracker_server=172.16.100.10:22122

UploadServlet.java

  1. package com.uploadServer.servlet;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.net.URL;
  6. import java.util.HashMap;
  7. import java.util.Iterator;
  8. import java.util.List;
  9. import java.util.Map;
  10. import java.util.Properties;
  11.  
  12. import javax.servlet.ServletException;
  13. import javax.servlet.http.HttpServlet;
  14. import javax.servlet.http.HttpServletRequest;
  15. import javax.servlet.http.HttpServletResponse;
  16.  
  17. import org.apache.commons.fileupload.FileItem;
  18. import org.apache.commons.fileupload.FileUploadException;
  19. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  20. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  21. import org.csource.fastdfs.ClientGlobal;
  22. import org.csource.fastdfs.StorageClient;
  23. import org.csource.fastdfs.StorageClient1;
  24. import org.csource.fastdfs.StorageServer;
  25. import org.csource.fastdfs.TrackerClient;
  26. import org.csource.fastdfs.TrackerServer;
  27.  
  28. import com.alibaba.fastjson.JSON;
  29.  
  30. /**
  31. * 功能:上传文件到FastDFS文件服务器,并返回访问链接
  32. * @author djoker
  33. *
  34. */
  35. public class UploadServlet extends HttpServlet {
  36.  
  37. private static final long serialVersionUID = 1L;
  38.  
  39. private TrackerClient trackerClient = null;
  40. private TrackerServer trackerServer = null;
  41. private StorageClient storageClient= null;
  42. private StorageServer storageServer= null;
  43. private StorageClient1 storageClient1= null;
  44. private Properties properties = null;
  45. private InputStream imgServerConf = null;
  46.  
  47. @Override
  48. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  49. throws ServletException, IOException {
  50.  
  51. DiskFileItemFactory factory = new DiskFileItemFactory();
  52.  
  53. ServletFileUpload upload = new ServletFileUpload(factory);
  54.  
  55. Map<String, Object> putMap = new HashMap<String, Object>();
  56.  
  57. try {
  58. //读取配置文件
  59. imgServerConf = this.getClass().getClassLoader().getResourceAsStream("uploadServer.properties");
  60. properties = new Properties();
  61. properties.load(imgServerConf);
  62.  
  63. //获取FastDFS客户端的配置文件和初始化环境
  64. String conf = this.getClass().getClassLoader().getResource("fdfs_client.conf").getPath();
  65. ClientGlobal.init(conf);
  66.  
  67. //从request中获取文件
  68. List<FileItem> items = upload.parseRequest(request);
  69. //循环文件集合
  70. int fileNum = 1;
  71. for(Iterator<FileItem> iter = items.iterator(); iter.hasNext();){
  72. FileItem item = iter.next();
  73. Map<String, Object> resMap = new HashMap<String, Object>();
  74. resMap.put("fileNum", fileNum);
  75. if(item.getSize() == 0){
  76. resMap.put("code", -1);
  77. }else{
  78. trackerClient = new TrackerClient();
  79. trackerServer = trackerClient.getConnection();
  80. storageClient1 = new StorageClient1(trackerServer, storageServer);
  81.  
  82. //上传后返回文件路径参数
  83. String[] url = storageClient1.upload_file(item.get(), item.getName().substring(item.getName().indexOf(".") + 1, item.getName().length()), null);
  84.  
  85. //单个文件的返回信息
  86. resMap.put("code", 0);
  87. resMap.put("imgServerAddress", properties.getProperty("imgServerAddress"));
  88. resMap.put("imgServerPort", properties.getProperty("imgServerPort"));
  89. resMap.put("groupName", url[0]);
  90. resMap.put("imgPath", url[1]);
  91. resMap.put("fileName", item.getName());
  92. resMap.put("imgUrl", "http://" + properties.getProperty("imgServerAddress")
  93. + ":" + properties.getProperty("imgServerPort") + "/" + url[0] + "/" + url[1]);
  94. }
  95.  
  96. putMap.put(Integer.toString(fileNum), resMap);
  97. fileNum++;
  98. }
  99. } catch (FileUploadException e) {
  100. // TODO Auto-generated catch block
  101. e.printStackTrace();
  102. } catch (Exception e) {
  103. // TODO Auto-generated catch block
  104. e.printStackTrace();
  105. }
  106.  
  107. //输出
  108. response.getWriter().println(JSON.toJSONString(putMap));
  109. }
  110.  
  111. }

前段jsp页面,upload.jsp

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

测试:

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

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

返回上传结果

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

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

简单的文件上传服务器(上传到FastDFS服务器)的更多相关文章

  1. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  2. 使用jsp/servlet简单实现文件上传与下载

    使用JSP/Servlet简单实现文件上传与下载    通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...

  3. ASP.NET跨服务器上传文件的相关解决方案

    第一种:通过FTP来上传文件 首先,在另外一台服务器上设置好FTP服务,并创建好允许上传的用户和密码,然后,在ASP.NET里就可以直接将文件上传到这台 FTP 服务器上了.代码如下: <%@ ...

  4. SpringMVC中文件的上传(上传到服务器)和下载问题(一)

    一.今天我们所说的是基于SpringMVC的关于文件的上传和下载的问题的解决.(这里所说的上传和下载都是上传到服务器与从服务器上下载文件).这里的文件包括我们常用的各种文件.如:文本文件(.txt), ...

  5. Javaweb向服务器上传文件以及从服务器下载文件的方法

    先导入jar包 点击下载 commons-fileupload是Apache开发的一款专门用来处理上传的工具,它的作用就是可以从request对象中解析出,用户发送的请求参数和上传文件的流. comm ...

  6. Django 实现简单的文件上传

    今天分享一下Django实现的简单的文件上传的小例子. 步骤 创建Django项目,创建Django应用 设计模型 处理urls.py 以及views.py 设计模板,设计表单 运行项目,查看数据库 ...

  7. 向linux服务器上传下载文件方式收集

    向linux服务器上传下载文件方式收集 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ...

  8. 通过XShell实现windows文件上传到Linux服务器上

    .XShell上传文件到Linux服务器上 在学习Linux过程中,我们常常需要将本地文件上传到Linux主机上,这里简单记录下使用Xsheel工具进行文件传输 1:首先连接上一台Linux主机 2: ...

  9. 简单的文件上传的下载(动态web项目)

    1.在页面中定义一个form表单,如下: <!-- 文件上传 --> <form action="${pageContext.request.contextPath}/Fi ...

随机推荐

  1. 内存管理之栈stack

    1.什么是栈   栈是一种数据结构,C语言中使用栈来保存局部变量.栈是被发明出来管理内存的.2.栈管理内存的特点(小内存.自动化)   先进后出  FILO   first in last out   ...

  2. docker安装fastdfs与java客户端测试

    一.docker 安装FastDFS 1.拉取镜像 docker pull morunchang/fastdfs 2.创建并启动tracker容器 docker run -d --name=track ...

  3. mac下使用opencv编译安装新模块contrib

    opencv-4.0.1 opencv_contrib-4.0.1 提供ippicv下载链接: https://pan.baidu.com/s/1OIJRUqPqAtpMetku8qX36w cont ...

  4. Linux上创建RStudio快捷方式

    在Linux平台上经常会有一些软件需要通过命令行的方式启动,这没有图标启动方便,下面是在Linux平台为RStudio创建图标链接的方法: 下面以在桌面上创建RStudio快捷方式为例: (1) 首先 ...

  5. php 设计模式之策略者模式

    <?php header('Content-Type:text/html;charset=utf-8'); /** * 策略模式演示代码 * * 为了更好地突出“策略”,我们这里以出行为例演示, ...

  6. NodeJS框架一览

    NodeJS 框架一览 Express 当你使用Node.js构建web应用程序时, Express通常被视为事实上的Web服务器.它的哲学(一个可以使用中间件包扩展的简约核心)是大多数Node.js ...

  7. jsp/servlet编码原理

    转自:http://janwer.iteye.com/blog/150226 首先,说说 JSP/Servlet 中的几个编码的作用 在 JSP/Servlet 中主要有以下几种设置编码的方式: pa ...

  8. java数目

    第一部分: Java语言篇1 <Java编程规范>星级:适合对象:初级,中级介绍:作者James Gosling(Java之父),所以这本书我觉得你怎么也得读一下.对基础讲解的很不错. 2 ...

  9. LeetCode——324. 摆动排序 II

    给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1: 输入: nums = [1, 5 ...

  10. 怎样在 Akka Persistence 中实现分页查询

    在 Akka Persistence 中,数据都缓存在服务内存(状态),后端存储的都是一些持久化的事件日志,没法使用类似 SQL 一样的 DSL 来进行分页查询.利用 Akka Streams 和 A ...