简单的文件上传服务器(上传到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
- ## FastDFS\u6587\u4EF6\u670D\u52A1\u5668\u7684\u5730\u5740 ##
- imgServerAddress = 172.16.100.10
- ## FastDFS\u6587\u4EF6\u670D\u52A1\u5668\u7684\u8BBF\u95EE\u7AEF\u53E3 ##
- 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主机上查看是否删除成功
简单的文件上传服务器(上传到FastDFS服务器)的更多相关文章
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- 使用jsp/servlet简单实现文件上传与下载
使用JSP/Servlet简单实现文件上传与下载 通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...
- ASP.NET跨服务器上传文件的相关解决方案
第一种:通过FTP来上传文件 首先,在另外一台服务器上设置好FTP服务,并创建好允许上传的用户和密码,然后,在ASP.NET里就可以直接将文件上传到这台 FTP 服务器上了.代码如下: <%@ ...
- SpringMVC中文件的上传(上传到服务器)和下载问题(一)
一.今天我们所说的是基于SpringMVC的关于文件的上传和下载的问题的解决.(这里所说的上传和下载都是上传到服务器与从服务器上下载文件).这里的文件包括我们常用的各种文件.如:文本文件(.txt), ...
- Javaweb向服务器上传文件以及从服务器下载文件的方法
先导入jar包 点击下载 commons-fileupload是Apache开发的一款专门用来处理上传的工具,它的作用就是可以从request对象中解析出,用户发送的请求参数和上传文件的流. comm ...
- Django 实现简单的文件上传
今天分享一下Django实现的简单的文件上传的小例子. 步骤 创建Django项目,创建Django应用 设计模型 处理urls.py 以及views.py 设计模板,设计表单 运行项目,查看数据库 ...
- 向linux服务器上传下载文件方式收集
向linux服务器上传下载文件方式收集 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ...
- 通过XShell实现windows文件上传到Linux服务器上
.XShell上传文件到Linux服务器上 在学习Linux过程中,我们常常需要将本地文件上传到Linux主机上,这里简单记录下使用Xsheel工具进行文件传输 1:首先连接上一台Linux主机 2: ...
- 简单的文件上传的下载(动态web项目)
1.在页面中定义一个form表单,如下: <!-- 文件上传 --> <form action="${pageContext.request.contextPath}/Fi ...
随机推荐
- 内存管理之栈stack
1.什么是栈 栈是一种数据结构,C语言中使用栈来保存局部变量.栈是被发明出来管理内存的.2.栈管理内存的特点(小内存.自动化) 先进后出 FILO first in last out ...
- docker安装fastdfs与java客户端测试
一.docker 安装FastDFS 1.拉取镜像 docker pull morunchang/fastdfs 2.创建并启动tracker容器 docker run -d --name=track ...
- mac下使用opencv编译安装新模块contrib
opencv-4.0.1 opencv_contrib-4.0.1 提供ippicv下载链接: https://pan.baidu.com/s/1OIJRUqPqAtpMetku8qX36w cont ...
- Linux上创建RStudio快捷方式
在Linux平台上经常会有一些软件需要通过命令行的方式启动,这没有图标启动方便,下面是在Linux平台为RStudio创建图标链接的方法: 下面以在桌面上创建RStudio快捷方式为例: (1) 首先 ...
- php 设计模式之策略者模式
<?php header('Content-Type:text/html;charset=utf-8'); /** * 策略模式演示代码 * * 为了更好地突出“策略”,我们这里以出行为例演示, ...
- NodeJS框架一览
NodeJS 框架一览 Express 当你使用Node.js构建web应用程序时, Express通常被视为事实上的Web服务器.它的哲学(一个可以使用中间件包扩展的简约核心)是大多数Node.js ...
- jsp/servlet编码原理
转自:http://janwer.iteye.com/blog/150226 首先,说说 JSP/Servlet 中的几个编码的作用 在 JSP/Servlet 中主要有以下几种设置编码的方式: pa ...
- java数目
第一部分: Java语言篇1 <Java编程规范>星级:适合对象:初级,中级介绍:作者James Gosling(Java之父),所以这本书我觉得你怎么也得读一下.对基础讲解的很不错. 2 ...
- LeetCode——324. 摆动排序 II
给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1: 输入: nums = [1, 5 ...
- 怎样在 Akka Persistence 中实现分页查询
在 Akka Persistence 中,数据都缓存在服务内存(状态),后端存储的都是一些持久化的事件日志,没法使用类似 SQL 一样的 DSL 来进行分页查询.利用 Akka Streams 和 A ...