fastDFS分布式文件系统与文件上传下载
来源:互联网 发布:阿里云连接管理终端 编辑:程序博客网 时间:2024/05/23 15:35
传统的文件上传方式就是将文件直接上传保存到项目服务器中,这样做有以下几个缺点:
1.容错性差,如果服务器出现问题有可能导致上传文件丢失
2.占用服务器资源,上传文件过多会大量消耗服务器资源导致系统性能下降
3.不适应于集群环境,有可能出现上传与下载不在同一个服务器中。
传统的文件上传方式很明显不适用与互联网项目,解决方案就是使用第三方服务器存储上传文件。fastDFS是阿里巴巴开发的开源的轻量级分布式文件系统,具有高可用、高并发、可拓展的优点,符合互联网项目的需求。
fastDFS分布式文件系统的特点:1.作为第三方服务器分布式文件系统存储文件,提高了容错性2.上传与下载统一在fastDFS进行,解决了集群资源共享问题3.浏览器访问远程服务器图片或静态页面时,需要遵循http协议,可以通过ngnix作为http服务器访问fastDFS的资源。fastDFS在项目中实现文件上传的环境要求:1.jar包(pom导入坐标) commos-io commos-fileupload fastDFS-client2.配置文件上传解析器(在springmvc中配置)3.客户端配置client.conf连接fastDFS服务器
附上项目图片上传部分代码:
前端页面部分
<a class="easyui-linkbutton file" iconCls="icon-upload" > <form id="upload_form"> <font size=2>本地上传</font> <input type="file" onchange="doUploadPhoto()" name="file" class="easyui-validatebox" validType="img_upload" /> </form> </a>function doUploadPhoto(){ if ($('#upload_form').form('validate')) { var form = new FormData($("#upload_form")[0]); var indexCode=$("#indexCode").val().trim(); $.ajax({ type: 'post' , url:"<%=path%>/uploadPhotoPG?indexCode="+indexCode, cache:false , data:form , dataType:'json', processData:false, contentType:false, success:function(result){ $.messager.show({ title:"提示信息", msg:"上传成功" }); setTimeout("location.reload(true)",1000); }, error:function(result){ $.messager.show({ title:"提示信息", msg:"未知错误" }); } }); }}
请求跳转Controller部分
@ResponseBody @RequestMapping(value = "/uploadPhotoPG", method = { RequestMethod.POST}) @Transactional(propagation=Propagation.REQUIRED) public Object uploadPhotoPG(MultipartFile file,String checkId,String appMenuCode,String storeyId,String indexCode) { try{ UploadLocalOrWeb uploadLocalOrWeb = new UploadLocalOrWeb(); String suffix = file.getOriginalFilename().split("\\.")[file.getOriginalFilename().split("\\.").length-1]; String url = uploadLocalOrWeb.uploadWeb(file.getBytes(), suffix); Photo photo = new Photo(); photo.setId(UuidUtil.create()); photo.setIndexCode(indexCode); photo.setUrl(url); photo.setUploadtime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); photo.setIsWriteReport("Y"); photoService.create(photo); msg="上传成功"; code= "1"; map.put("msg", msg); map.put("code", code); }catch(Exception e){ //回滚事务 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); e.printStackTrace(); msg="上传失败"; code= "-1"; map.put("msg", msg); map.put("code", code); } return map; }
fastDFS工具类(实现上传功能)
package com.ra.fastdfs;import java.io.File;import java.io.InputStream;import java.util.Properties;/** * 上传控制 * 选择上传到本地 或是 上传到远程服务器 * @author MrC * */public class UploadLocalOrWeb { //远程服务器地址 @SuppressWarnings("unused") private static String proxy_server = "121.15.."; @SuppressWarnings("unused") private static String http = "http://"; //选择从本地项目下载还是从远程服务器下载文件 private static String LoadFromLocalOrWeb = "web"; /** * 读取配置文件 * @throws Exception */ private void loadProperty() throws Exception { Properties prop=new Properties(); InputStream is = this.getClass().getResourceAsStream("/fastdfs.properties"); prop.load(is); is.close(); proxy_server = prop.getProperty("proxy_server").trim(); LoadFromLocalOrWeb = prop.getProperty("LoadFromLocalOrWeb").trim(); } /** * 上传到本地 * @param buffer 上传的文件数组 * @param path 如:D://upload/ * @param fileExtName 如:"doc" * @param fileName 如:"image1" * @return */ public String uploadLocal(byte[] buffer, String reqPath, String folder, String fileExtName, String fileName)throws Exception{ String path = reqPath + File.separator + folder; String url = ""; String filePathName = ""; File file = new File(path); if (!file.exists()) { //判断文件夹是否存在,如果不存在则创建文件夹 file.mkdir(); } FileAndByte fab = new FileAndByte(); filePathName = fileName + FileUtils.randomName(fileExtName); fab.byte2File(buffer, path, filePathName); url = folder + File.separator + filePathName; return url; } /** 上传到远程服务器 * @throws Exception **/ public String uploadWeb(byte[] buffer,String fileExtName) throws Exception{ FastDFSClient client = new FastDFSClient(); String url,url2 = ""; //调用远程服务器保存文件,返回文件保存url url2 = client.upload(buffer,fileExtName); //url = http + proxy_server +":7788"+ File.separator + url; url = ReadPropertyUtil.getInstance("fastdfs.properties").getProperty("proxy_server").trim(); String str = ReadPropertyUtil.getInstance("fastdfs.properties").getProperty("http.tracker_server_port").trim(); url = "http://"+url + ":" + str + File.separator + url2 ; return url; } /** * @desc 图片压缩上传 * 先上传到本地,再压缩,再上传到图片真正上传的位置 * @author MrC * 实际上传地址 reqPath + folder * @param buffer 上传的文件数组 ***必需 * @param reqPath 如: D://images/ ***上传到本地必需 request.getServletContext().getRealPath("/") * @param folder 如: upload/case/ ***上传到本地必需 上传文件夹 * @param fileName 如:"image1" ***上传到本地必需 * @param fileExtName 如:"doc" ***上传到远程服务器必需 * @throws Exception */ public String compressImgAndUpload(byte[] buffer, String reqPath, String folder, String fileExtName, String fileName) throws Exception{ String url = ""; FileUtils fu = new FileUtils(); FileAndByte fab = new FileAndByte(); // 缓存图片 url = uploadLocal(buffer, reqPath, "upload/cache", fileExtName, fileName); // 压缩图片 fu.compressPic(reqPath+File.separator+url); // 压缩后的缓存图片 转成 byte[] 以便上传到文件服务器 byte[] buff = fab.File2byte(reqPath+File.separator+url); // 调用远程服务器保存文件,返回文件保存url url = DoUpload(buff, reqPath, folder, fileExtName, fileName); return url; } /** * 上传到本地或是远程服务器 * 实际上传地址 reqPath + folder * @param buffer 上传的文件数组 ***必需 * @param reqPath 如: D://images/ ***上传到本地必需 request.getServletContext().getRealPath("/") * @param folder 如: upload/case/ ***上传到本地必需 上传文件夹 * @param fileName 如:"image1" ***上传到本地必需 * @param fileExtName 如:"doc" ***上传到远程服务器必需 * @return * @throws Exception */ public String DoUpload(byte[] buffer, String reqPath, String folder, String fileExtName, String fileName) throws RuntimeException{ String url = ""; try { loadProperty();//读取配置文件 if(LoadFromLocalOrWeb.equals("web")){ //上传至远程服务器 url = uploadWeb(buffer, fileExtName); }else{ //上传至项目路径 url = uploadLocal(buffer, reqPath, folder, fileExtName, fileName); } } catch (Exception e) { throw new RuntimeException(); } return url; }}
阅读全文
1 0
- fastDFS分布式文件系统与文件上传下载
- 上传下载分布式部署FASTDFS安装与配置
- Fastdfs分布式文件系统之文件同步机制
- Fastdfs分布式文件系统之文件同步机制
- Fastdfs分布式文件系统之文件同步机制
- 分布式文件系统FastDFS配置与使用
- FastDFS分布式文件系统集群安装与配置
- FastDFS分布式文件系统集群安装与配置
- FastDFS分布式文件系统集群安装与配置
- FastDFS分布式文件系统集群安装与配置
- 分布式文件系统 FastDFS 与nginx 结合
- FastDFS分布式文件系统集群安装与配置
- FastDFS分布式文件系统集群安装与配置
- 分布式文件系统FastDFS
- 分布式文件系统 FastDFS
- 分布式文件系统FastDFS
- FastDFS分布式文件系统
- 分布式文件系统 FastDFS
- 链表的部分反转
- 让不懂编程的人爱上iPhone开发(2017秋iOS11+Swift4+Xcode9版)-第3篇
- /etc/exports参数解释
- javascript通过url向jsp页面传递中文参数乱码解决方法
- 部署 Graylog 日志系统
- fastDFS分布式文件系统与文件上传下载
- 3.1、类和方法
- 在Genymotion中安装apk报错:Failure [INSTALL_FAILED_NO_MATCHING_ABIS]
- 关于引用网络echarts.js报错的问题解决方法
- Python流程控制
- Exponential family form of Multivariate Gaussian Distribution
- linux下常用的系统工作命令
- 百度爬虫robots.txt文件规范
- time_t localtion