FastDFS分布式文件系统--整合Java代码并解决服务器跨域问题
来源:互联网 发布:win8.1怎么优化才流畅 编辑:程序博客网 时间:2024/06/07 13:26
文件服务器与java整合是有对应的工具包的,自己可以去下载 fastdfs-client-java.jar
然后自己创建一个maven web项目,下面就帖代码:
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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zlh</groupId> <artifactId>fastdfs</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>fastdfs</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <version>5.0.5</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <!-- spring 的基本依赖 开始 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.1.2.RELEASE</version> </dependency> <!-- spring 的基本依赖 结束 --> <!-- json --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.6</version> </dependency> <dependency> <groupId>com.sun.jersey.contribs</groupId> <artifactId>jersey-multipart</artifactId> <version>1.19.4</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.19.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.4</version> </dependency> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.6.5</version> </dependency> <dependency> <groupId>java.unrar</groupId> <artifactId>unrar</artifactId> <version>0.5</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> </dependencies> <build> <finalName>fastdfs</finalName> <!-- 配置工程编译级别 --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build></project>
这是Controller类:
package com.zlh.fastdfs.controller;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.csource.common.NameValuePair;import org.csource.fastdfs.ClientGlobal;import org.csource.fastdfs.StorageClient;import org.csource.fastdfs.StorageServer;import org.csource.fastdfs.TrackerClient;import org.csource.fastdfs.TrackerServer;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import com.zlh.fastdfs.common.BaseView;import com.zlh.fastdfs.common.FileView;import com.zlh.fastdfs.common.PropertitesUtil;/** * 文件名称: com.zlh.fastdfs.controller.FastdfsController.java</br> * 初始作者: ZLH</br> * 创建日期: 2017年8月22日</br> * 功能说明: 这里用一句话描述这个类的作用--此句话需删除 <br/> * =================================================<br/> * 修改记录:<br/> * 修改作者 日期 修改内容<br/> * ================================================<br/> * Copyright (c) 2010-2011 .All rights reserved.<br/> */@RestController@RequestMapping("")public class FastdfsController { private Logger logger = LoggerFactory.getLogger(FastdfsController.class); private static StorageClient storageClient = null; static { try { ClientGlobal.init(PropertitesUtil.conf_filename); TrackerClient tracker = new TrackerClient(); TrackerServer trackerServer = tracker.getConnection(); StorageServer storageServer = null; storageClient = new StorageClient(trackerServer, storageServer); } catch (Exception e) { e.printStackTrace(); } } @RequestMapping(value = "upload", method = RequestMethod.POST) public Object upload(MultipartFile attach, HttpServletRequest request, HttpServletResponse response) { FileView fileView = new FileView(); try { NameValuePair nvp[] = new NameValuePair[] { new NameValuePair("fileName", attach.getOriginalFilename()), new NameValuePair("type", attach.getContentType()), new NameValuePair("ext", PropertitesUtil.getFilenameExt(attach.getOriginalFilename())), new NameValuePair("size", Long.valueOf(attach.getSize()).toString()) }; String fileIds[] = storageClient.upload_file(attach.getBytes(), PropertitesUtil.getFilenameExt(attach.getOriginalFilename()), nvp); fileView.setFileSize(Long.valueOf(attach.getSize()).toString()); fileView.setFileName(attach.getOriginalFilename()); fileView.setFilePath(fileIds[0] + "/" + fileIds[1]); logger.info(fileIds.length + ""); logger.info("组名:" + fileIds[0]); logger.info("路径: " + fileIds[1]); } catch (Exception e) { e.printStackTrace(); return new BaseView(false, "上传失败!"); } return new BaseView(fileView); }}
服务器应答公共实体类:
package com.zlh.fastdfs.common;import java.io.Serializable;/** * 文件名称: com.sdzkpt.common.utils.BaseView.java</br> * 初始作者: zlh</br> * 创建日期: 2016年8月11日</br> * 功能说明: 封装控制层返回给前端的状态描述,实体数据等 <br/> * =================================================<br/> * 修改记录:<br/> * 修改作者 日期 修改内容<br/> * ================================================<br/> * Copyright (c) 2010-2011 .All rights reserved.<br/> */public class BaseView implements Serializable { /** * 字段描述: [字段功能描述] */ private static final long serialVersionUID = -3312282922207239793L; /** * 请求是否成功,true:成功,false:失败 */ private boolean isSuccess; /** * 状态描述 */ private String msgCode; /** * 待返回数据视图 */ private Object data; /** * 方法描述: 默认无参构造器 */ public BaseView() { isSuccess = true; msgCode = ""; } /** * 方法描述: 指定状态与描述的构造器 * * @param isSuccess * 成功与否标志,true:成功,false:失败 * @param msgCode * 状态码 */ public BaseView(boolean isSuccess, String msgCode) { this.isSuccess = isSuccess; this.msgCode = msgCode; } /** * 方法描述: 指定特定类型数据视图,由于指定了数据,默认状态为成功,状态码为空,如需指定自定义状态码,请使用其他构造器 * * @param data * 待返回指定类型数据视图 */ public BaseView(Object data) { isSuccess = true; msgCode = ""; this.data = data; } /** * 方法描述: 指定状态,描述及指定数据视图的构造器 * * @param isSuccess * 成功与否标志,true:成功,false:失败 * @param msgCode * 状态码 * @param obj * 待返回指定类型数据视图 */ public BaseView(boolean isSuccess, String msgCode, Object data) { this.isSuccess = isSuccess; this.msgCode = msgCode; this.data = data; } /** * 方法描述: 获取请求是否成功标志,true:成功,false:失败</br> * 初始作者: zlh<br/> * 创建日期: 2016年2月3日-下午5:41:51<br/> * 开始版本: 2.0.0<br/> * =================================================<br/> * 修改记录:<br/> * 修改作者 日期 修改内容<br/> * ================================================<br/> * * @return * boolean 请求是否成功,true:成功,false:失败 */ public boolean getIsSuccess() { return isSuccess; } /** * 方法描述: 获取状态描述</br> * 初始作者: zlh<br/> * 创建日期: 2016年2月3日-下午5:42:25<br/> * 开始版本: 2.0.0<br/> * =================================================<br/> * 修改记录:<br/> * 修改作者 日期 修改内容<br/> * ================================================<br/> * * @return * String 状态描述 */ public String getMsgCode() { return msgCode; } /** * 方法描述: 获取待返回的数据视图</br> * 初始作者: zlh<br/> * 创建日期: 2016年2月24日-上午11:37:20<br/> * 开始版本: 2.0.0<br/> * =================================================<br/> * 修改记录:<br/> * 修改作者 日期 修改内容<br/> * ================================================<br/> * * @return * Object 指定类型的数据视图 */ public Object getData() { return data; }}
返回值实体类:
package com.zlh.fastdfs.common;import java.io.Serializable;/** * 文件名称: com.zlh.fastdfs.common.FileView.java</br> * 初始作者: zlh</br> * 创建日期: 2017年8月22日</br> * 功能说明: 这里用一句话描述这个类的作用--此句话需删除 <br/> * =================================================<br/> * 修改记录:<br/> * 修改作者 日期 修改内容<br/> * ================================================<br/> * Copyright (c) 2010-2011 .All rights reserved.<br/> */public class FileView implements Serializable { /** * 字段描述: [字段功能描述] */ private static final long serialVersionUID = 1L; private String fileSize; private String fileName; private String filePath; public String getFileSize() { return fileSize; } public void setFileSize(String fileSize) { this.fileSize = fileSize; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public String getFilePath() { return filePath; } public void setFilePath(String filePath) { this.filePath = filePath; }}
读取配置工具类:
package com.zlh.fastdfs.common;/** * 文件名称: com.zlh.fastdfs.common.PropertitesUtil.java</br> * 初始作者: zlh</br> * 创建日期: 2017年8月22日</br> * 功能说明: 这里用一句话描述这个类的作用--此句话需删除 <br/> * =================================================<br/> * 修改记录:<br/> * 修改作者 日期 修改内容<br/> * ================================================<br/> * Copyright (c) 2010-2011 .All rights reserved.<br/> */public class PropertitesUtil extends ConfigurableContants { // 静态初始化读入framework.properties中的设置 static { init("/client.conf"); } public static final String conf_filename = PropertitesUtil.class.getResource("/client.conf").getPath(); // public String conf_filename =getProperty(key, defaultValue); public static String getFilenameExt(String fileName) { String fileExtName = ""; if (fileName == null || "".equals(fileName)) { return null; } int nPos = fileName.lastIndexOf('.'); if (nPos > 0 && fileName.length() - nPos <= 7) { fileExtName = fileName.substring(nPos + 1); } return fileExtName; }}
整合的配置文件client.conf:
connect_timeout = 2network_timeout = 30charset = UTF-8http.tracker_http_port = 80http.anti_steal_token = notracker_server = 118.145.79.12:22122#tracker_server = 192.168.0.119:22122
springmvc的dispatcher-servlet.xml:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 配置controller层扫描包 --> <context:component-scan base-package="com.zlh.fastdfs.controller" /> <!-- 支持上传文件 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> <!-- 配置应用参数 --> <context:property-placeholder location="classpath:client.conf" ignore-unresolvable="true"/> <!-- 注解驱动 --> <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <!--避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> <value>text/plain;charset=UTF-8</value> <value>text/html;charset=UTF-8</value> </list> </property> <property name="features"> <list> <value>WriteDateUseDateFormat</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 设置view resolver --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <mvc:default-servlet-handler/></beans>
web.xml:
<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <context-param> <param-name>fastdfs</param-name> <param-value>webapp</param-value> </context-param> <!-- 统一编码过滤器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置Spring MVC DispatcherServlet --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 初始化参数 --> <init-param> <!-- 加载SpringMVC的xml到 spring的上下文容器中 --> <param-name>contextConfigLocation</param-name> <param-value>classpath:dispatcher-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/fdfs/*</url-pattern> </servlet-mapping></web-app>
以上就是java整合的代码,本人已测试可运行,并拿到文件服务器的返回值!有问题欢迎指正留言,谢谢,小弟荣幸之至!
我在网上之前也看了很多的整合事例都是本机运行的,但是我们实际中文件服务器肯定是和应用服务器是分开的,所以这里就会遇到一个很实际的问题就是–跨域访问–的问题,小弟才疏学浅,折腾了一天,最终得到解决,我现在把我遇到的坑说一下,给你们借鉴一下,希望能帮到你们,少走点弯路:
通过使用nginx代理:以我自己的事例,我本地应用想访问我某云上的文件服务器,我本地访问应用是用了nginx代理的,一开始我是直接通过ip+port访问这个web项目的,这种方式肯定是要报跨域错误的,后来我通过本地nginx代理web项目访问还是不行,直接报405不支持GET请求(因为上传我指定了POST),我很纳闷,怎么代理了一下变成GET请求了,最后我又在文件服务器的上的nginx代理了一波web项目(上一篇文章安装的nginx) ,最终的方式就是:本地的nginx代理 -代理请求-云上的nginx-然后云上的nginx代理请求最终的web项目-得到了最终的解决办法!
比如:前端js 的url: http://127.0.0.1:8000/my-fdfs/
本地的nginx配置我监听的8000:
location /my-fdfs/ {
proxy_pass http://118.145.79.12/fastdfs/fdfs/upload/;
}
云上的nginx我监听的是80端口,所以上面代理的没写端口,云上的nginx配置:
location /fastdfs/fdfs/upload/{
proxy_pass http://118.145.79.12:8081/fastdfs/fdfs/upload/;
}
这层代理是直接访问web项目的ip+port访问的
综上所述,可以解决跨域的问题,我的这种解决方案还希望大牛指点,不喜勿喷!
最后祝大家码的开心!
- FastDFS分布式文件系统--整合Java代码并解决服务器跨域问题
- FastDFS分布式文件系统搭建图片服务器
- CentOS7搭建FastDFS V5.11分布式文件系统及Java整合详细过程(一)
- CentOS7搭建FastDFS V5.11分布式文件系统及Java整合详细过程(二)
- CentOS7搭建FastDFS V5.11分布式文件系统及Java整合详细过程(三)
- CentOS7搭建FastDFS V5.11分布式文件系统及Java整合详细过程(四)
- 四、分布式文件系统fastDFS-Java Api
- 分布式文件系统研究-FastDFS整合Nginx(三)
- 分布式文件系统FastDFS
- 分布式文件系统 FastDFS
- 分布式文件系统FastDFS
- FastDFS分布式文件系统
- 分布式文件系统 FastDFS
- fastDFS分布式文件系统
- 分布式文件系统FastDFS
- FastDFS分布式文件系统简介
- 分布式文件系统FastDFS
- 分布式文件系统 FastDFS
- Android 屏幕适配攻略(二)单位dp与px来表示控件的尺寸
- Postman简介
- 3DES加解密-KTDes3Tool
- 智能小车十八《如何用上级路由器访问openwrt》
- Spark性能优化:资源调优篇
- FastDFS分布式文件系统--整合Java代码并解决服务器跨域问题
- 极乐技术周报(第二十三期)
- Git安装及钥匙的生成
- Request对象的主要方法:
- vs2010编译python3.5.4源代码
- 立体匹配
- centos6 安装nginx
- Hyperledger Composer之开发部署业务网络(方式二)
- C#