基于SSM架构项目的FastDFS完整接口

package com.gcx.fileapi.untils;

import java.io.Serializable;
/**
 * FastDFS文件基本参数接口 
 * 
 * 2017-4-19 下午
 * 
 * @author ShiLei
 */
public interface FileManagerConfig extends Serializable {
	
    public static final String FILE_DEFAULT_AUTHOR = "GCX";

    public static final String PROTOCOL = "http://";

    public static final String SEPARATOR = "/";

   // public static final String STORAGE_NGNIX_ADDR = "file.gcx365.com:8090";
    public static final String STORAGE_NGNIX_ADDR = "";

    public static final String CLIENT_CONFIG_FILE = "fastDFS.conf";
}
package com.gcx.fileapi.untils;

import java.io.File;
import java.util.List;

import org.csource.common.NameValuePair;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.FileInfo;
import org.csource.fastdfs.StorageClient1;
import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;

import com.alibaba.fastjson.JSONObject;
import com.gcx.fileapi.model.FastDFSFile;

/**
 * 文件上传/下载 工具类  
 * 
 * 2017-4-19 下午
 * 
 * @author ShiLei
 */
public class FastDFSUntils implements FileManagerConfig {

	private static final long serialVersionUID = 1L;

	private static TrackerClient trackerClient;
	private static TrackerServer trackerServer;
	private static StorageServer storageServer;
	private static StorageClient1 storageClient;
	static {
		try {
			String conf = new File(FastDFSUntils.class.getResource("/").getFile()).getCanonicalPath()+ File.separator + CLIENT_CONFIG_FILE;
			ClientGlobal.init(conf);
			trackerClient = new TrackerClient();
			trackerServer = trackerClient.getConnection();
			storageClient = new StorageClient1(trackerServer, storageServer);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 方法概要:文件上传  
	 * 
	 * 创建时间: 2017-4-19 下午
	 * 
	 * @param FastDFSFile file, NameValuePair[] valuePairs
	 *            
	 * @return filePath 文件绝对路径
	 * 
	 * @author ShiLei
	 */
	public static String uploadFile(FastDFSFile file, NameValuePair[] valuePairs) {
		String filePath = "";
		try {
			synchronized(storageClient){
				filePath = storageClient.upload_file1(file.getGroupName(),file.getContent(), file.getFileExt(), valuePairs);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
		//fileAbsolutePath = "http://file.gcx365.com:8090/group1/M00/00/00/wKhktVj3E22AC7JuAAAAEXt8jSg129.txt";
		//String fileAbsolutePath = PROTOCOL + STORAGE_NGNIX_ADDR + SEPARATOR + filePath;
		//return fileAbsolutePath;
		return filePath;
	}
	
	/**
	 * 方法概要: 根据本地指定全路径上传
	 * 
	 * 创建时间: 2017-4-19 下午
	 * 
	 * @param String groupName,String fileFullUrl
	 * 
	 * @return filePath
	 * 
	 * @author ShiLei
	 */
        public static String uploadFile(String groupName,String fileFullUrl) throws Exception {
           String filePath = "";
		try {
			synchronized(storageClient){
				filePath = storageClient.upload_file1(groupName,fileFullUrl, null, null);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
           return filePath;
        }
	
	/**
	 *  方法概要: 文件下载 
	 *  
	 *  创建时间:  2017-6-19 下午
	 * 
	 * @param String filePath
	 *            
	 * @return byte[] content
	 * 
	 * @author ShiLei
	 */
	public static byte[] downloadFile(String filePath) {
	    byte[] content = null;
	    try {
	    	synchronized(storageClient){
		        content = storageClient.download_file1(filePath);
	    	}
	    } catch (Exception e) {
	        e.printStackTrace();
	    }
	    return content;
	}

	/**
	 *  方法概要: 文件删除
	 *  
	 *  创建时间:  2017-6-19 下午
	 * 
	 * @param String filePath 服务器上该文件路径url(将数组转成json字符串)
	 *            
	 * @return flag(0表示成功,-1表示失败)
	 * 
	 * @author ShiLei
	 */
	public static int deleteFile(String filePath) {
		try {
			List<String> list = JSONObject.parseArray(filePath, String.class);
			synchronized(storageClient){
				for (String url : list) {
					storageClient.delete_file1(url);
				}
				return 0;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return -1;
		} 
	}

	/**
	 *  方法概要: 获取指定文件信息
	 *  
	 *  创建时间:  2017-6-19 下午
	 * 
	 * @param String filePath
	 *            
	 * @return FileInfo
	 * 
	 * @author ShiLei
	 */
	public static FileInfo getFileInfo(String filePath) {
		FileInfo info = null;
		try {
			synchronized(storageClient){
				info = storageClient.get_file_info1(filePath);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return info;
	}

	/**
	 *  方法概要: 获取指定文件元信息
	 *  
	 *  创建时间:  2017-6-19 下午
	 * 
	 * @param String filePath
	 *            
	 * @return NameValuePair[]
	 * 
	 * @author ShiLei
	 */
	public static NameValuePair[] getMetaInfo(String filePath) {
		NameValuePair[] pairs=null;
		try {
			synchronized(storageClient){
				pairs = storageClient.get_metadata1(filePath);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return pairs;
	}
	
}
package com.gcx.fileapi.service.serviceImpl;

/**
 * @author ShiLei
 * 
 * 创建时间: 2017-4-25 下午
 *
 */
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.csource.common.NameValuePair;
import org.csource.fastdfs.FileInfo;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.gcx.fileapi.model.FastDFSFile;
import com.gcx.fileapi.model.Params;
import com.gcx.fileapi.service.FastDFSService;
import com.gcx.fileapi.untils.FastDFSUntils;

@Service("fastdfsService")
public class FastDFSServiceImpl implements FastDFSService {

	// 上传1
	public String upload(String groupName, MultipartFile attach) {
		Params params = null;
		String filePath = "";
		try {
			params = getData(groupName, attach);
			if (params != null) {
				filePath = FastDFSUntils.uploadFile(params.getFile(),
						params.getValuePairs());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return filePath;
	}

	// 上传2
	public String upload(String groupName,String fileFullUrl) {
		String filePath = "";
		try {
			if (fileFullUrl != null && !"".equals(fileFullUrl)) {
				filePath = FastDFSUntils.uploadFile(groupName,fileFullUrl);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return filePath;
	}
	
	// 上传3
	public String uploadByPlugin(HttpServletRequest request, String groupName) throws Exception {
		// 定义回显filePath地址
		String filePath = "";
		Params params = null;
		// 创建一个通用的多部分解析器
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
				request.getSession().getServletContext());
		// 判断 request 是否有文件上传,即多部分请求
		if (multipartResolver.isMultipart(request)) {
			// 转换成多部分request
			MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
			// 取得request中的所有文件名
			Iterator<String> iter = multiRequest.getFileNames();
			while (iter.hasNext()) {
				// 取得上传文件
				MultipartFile attach = multiRequest.getFile(iter.next());
				if (attach != null) {
					// 如果名称不为"",说明该文件存在,否则说明该文件不存在
					if (attach.getOriginalFilename().trim() != "") {
						params = getData(groupName, attach);
						if (params != null) {
							filePath = FastDFSUntils.uploadFile(
								params.getFile(), params.getValuePairs());
						}
					}
				}
			}
		}
		return filePath;
	}
    
	// 下载
	public void downloadFile(HttpServletResponse response, String filePath) throws IOException {
		
		String fileName = getMetaInfo(filePath).get("FileName");
		
		byte[] content=null;
		if (filePath != null && !"".equals(filePath)) {
			content = FastDFSUntils.downloadFile(filePath);
			InputStream is = new ByteArrayInputStream(content);  
			// 设置response参数,可以打开下载页面  
			response.reset();  
			response.setContentType("application/*;charset=utf-8");  
			response.setHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes(), "iso-8859-1"));  
			BufferedInputStream bis = new BufferedInputStream(is); 
			BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());  
			try {  
				byte[] buff = new byte[2048];  
				int bytesRead;  
				while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {  
					bos.write(buff, 0, bytesRead);  
				}  
			} catch (Exception e) {  
				e.printStackTrace();
			} finally {  
				if (bis != null)  
					bis.close();  
				if (bos != null)  
					bos.close();  
			}
		}
	}

	// 获取参数
	public Params getData(String groupName, MultipartFile attach) throws Exception {
		Params param = new Params();
		if (groupName != null && !"".equals(groupName) && attach != null) {
			// 获取文件后缀名
			String ext = attach.getOriginalFilename().substring(
					attach.getOriginalFilename().lastIndexOf(".") + 1);
			FastDFSFile file = new FastDFSFile(attach.getBytes(), groupName,
					attach.getOriginalFilename(), ext, String.valueOf(attach.getSize()));
			NameValuePair[] valuePairs = new NameValuePair[4];
			valuePairs[0] = new NameValuePair("FileName",
					attach.getOriginalFilename());
			valuePairs[1] = new NameValuePair("FileLength",
					String.valueOf(attach.getSize())+" B");
			valuePairs[2] = new NameValuePair("FileExt", ext);
			valuePairs[3] = new NameValuePair("FileAuthor",file.getFileAuthor());

			param.setFile(file);
			param.setValuePairs(valuePairs);
		}
		return param;
	}

	// 文件刪除
	public int deleteFile(String filePath) {
		if (filePath != null && !"".equals(filePath)) {
			int flag=FastDFSUntils.deleteFile(filePath);
			return flag;
		}
		return -1;
	}

	// 获取指定文件信息
	public Map<String, String> getFileInfo(String filePath) {
		Map<String, String> map=new HashMap<String, String>();
		if (filePath != null && !"".equals(filePath)) {
			
			FileInfo info=FastDFSUntils.getFileInfo(filePath);
			
			Date createDate = info.getCreateTimestamp(); 
			map.put("CreateTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createDate));
			long fileSize = info.getFileSize(); 
			map.put("FileLength", fileSize+" B");
			String sourceIp = info.getSourceIpAddr(); 
			map.put("SourceIp", sourceIp);
		}
		return map;
	}

	// 获取指定文件元信息
	public Map<String, String> getMetaInfo(String filePath) {
		Map<String, String> map=new HashMap<String, String>();
		if (filePath != null && !"".equals(filePath)) {
			
			NameValuePair[] pairs=FastDFSUntils.getMetaInfo(filePath);
			
			for(NameValuePair meta : pairs) { 
				map.put(meta.getName(),meta.getValue());
			}
		}
		return map;
	}

}
package com.gcx.fileapi.service;

import java.io.IOException;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.multipart.MultipartFile;

/**
 * @author ShiLei
 * 
 * 创建时间: 2017-4-19 下午
 *
 */
public interface FastDFSService {

	String upload(String groupName, MultipartFile attach);
	
	String upload(String groupName,String fileFullUrl);

	String uploadByPlugin(HttpServletRequest request, String groupName) throws Exception;

	void downloadFile(HttpServletResponse response, String filePath) throws IOException;

	int deleteFile(String filePath);

	Map<String, String> getFileInfo(String filePath);

	Map<String, String> getMetaInfo(String filePath);
}
package com.gcx.fileapi.model;

import com.gcx.fileapi.untils.FileManagerConfig;

/**
 * FastDFSFile实体类 
 * 
 * 2017-4-19 下午
 * 
 * @fileAuthor ShiLei
 */
public class FastDFSFile implements FileManagerConfig {

    private static final long serialVersionUID = 1L;

    private byte[] content;       //上传内容  二进制字节
    private String groupName;     //组名
    private String fileName;      //文件名称
    private String fileExt;       //文件后缀名
    private String fileLength;    //文件长度
    private String fileAuthor = FILE_DEFAULT_AUTHOR;  

    public FastDFSFile(byte[] content, String fileExt) {
        this.content = content;
        this.fileExt = fileExt;
    }

    public FastDFSFile(byte[] content, String groupName,String fileName, String fileExt) {
        this.content = content;
        this.fileName = fileName;
        this.fileExt = fileExt;
        this.groupName=groupName;
    }

    public FastDFSFile(byte[] content,String groupName, String fileName, String fileExt, String fileLength) {
        this.content = content;
        this.groupName=groupName;
        this.fileName = fileName;
        this.fileExt = fileExt;
        this.fileLength = fileLength;
    }

    public byte[] getContent() {
        return content;
    }

    public void setContent(byte[] content) {
        this.content = content;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getFileExt() {
        return fileExt;
    }

    public void setFileExt(String fileExt) {
        this.fileExt = fileExt;
    }

    public String getFileLength() {
        return fileLength;
    }

    public void setFileLength(String fileLength) {
        this.fileLength = fileLength;
    }

    public String getFileAuthor() {
        return fileAuthor;
    }

    public void setFileAuthor(String fileAuthor) {
        this.fileAuthor = fileAuthor;
    }

    public String getGroupName() {
	return groupName;
    }

    public void setGroupName(String groupName) {
	this.groupName = groupName;
    }

}
package com.gcx.fileapi.model;

import org.csource.common.NameValuePair;

public class Params {
	private NameValuePair[] valuePairs;
	private FastDFSFile file;

	public FastDFSFile getFile() {
		return file;
	}

	public void setFile(FastDFSFile file) {
		this.file = file;
	}

	public NameValuePair[] getValuePairs() {
		return valuePairs;
	}

	public void setValuePairs(NameValuePair[] valuePairs) {
		this.valuePairs = valuePairs;
	}

}
package com.gcx.fileapi.model;

public class ReturnUploadImage {
	private String title;
	private String original;
	private String state;
	private String url;

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getOriginal() {
		return original;
	}

	public void setOriginal(String original) {
		this.original = original;
	}

	public String getState() {
		return state;
	}

	public void setState(String state) {
		this.state = state;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}
}
package com.gcx.fileapi.controller;

import java.io.IOException;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import com.alibaba.fastjson.JSON;
import com.gcx.fileapi.model.ReturnUploadImage;
import com.gcx.fileapi.service.FastDFSService;

@Controller
@RequestMapping("/fileController")
public class FastDFSController {
	
	@Autowired
	private FastDFSService fastdfsService;

	/**
	 * 方法概要: 传统上传1
	 * 
	 * 创建时间: 2017-4-19 下午
	 * 
	 * @param String groupName,MultipartFile attach
	 * 
	 * @return filePath
	 * 
	 * @author ShiLei
	 */
	@RequestMapping(value = "/uploadOne")
	@ResponseBody
	public String upload(String groupName, MultipartFile attach) throws IOException {
			
		String filePath=fastdfsService.upload(groupName, attach);

		return filePath;
	}
    
	/**
	 * 方法概要: 根据本地指定全路径上传  上传2
	 * 
	 * 创建时间: 2017-4-19 下午
	 * 
	 * @param String groupName,String fileFullUrl
	 * 
	 * @return filePath
	 * 
	 * @author ShiLei
	 */
	@RequestMapping(value = "/uploadTwo")
	@ResponseBody
	public String upload(String groupName,String fileFullUrl) throws IOException {
			
		String filePath=fastdfsService.upload(groupName,fileFullUrl);

		return filePath;
	}	
	
	/**
	 * 方法概要: 使用上传插件Uploadify 上传3
	 * 
	 * 创建时间: 2017-4-19 下午
	 * 
	 * @param String groupName
	 * 
	 * @return filePath
	 * 
	 * @author ShiLei
	 */
	@RequestMapping("/uploadByPlugin")
	@ResponseBody
	public String uploadByPlugin(HttpServletRequest request, String groupName)
			throws Exception {
		
		String filePath = fastdfsService.uploadByPlugin(request, groupName);
		
		return filePath;
	}
	
	/**
	 * 方法概要: 使用上传插件UEditor 上传4
	 * 
	 * 创建时间: 2017-4-19 下午
	 * 
	 * @param String groupName
	 * 
	 * @return filePath
	 * 
	 * @author ShiLei
	 */
	@RequestMapping("/uploadByPluginUE")
	@ResponseBody
	public void uploadByPluginUE(HttpServletRequest request,HttpServletResponse response,String groupName)
			throws Exception {
		
		response.setContentType("text/html;charset=UTF-8");
		// 转型为MultipartHttpRequest:
		MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest) request;
		// 获得文件:
		MultipartFile attach =multipartRequest.getFile("upfile"); //UEditor传到后台的是这个upfile,其他的文件上传,应该类似
		String picaddr = fastdfsService.upload(groupName, attach);
		
		ReturnUploadImage rui = new ReturnUploadImage();
//		rui.setTitle(picaddr);//这里需要设置文件名称如:xxx.jpg
//		rui.setOriginal(picaddr);//这里需要设置文件名称如:xxx.jpg
		rui.setState("SUCCESS");//这里上传成功的话一定要设置大写的 SUCCESS
		rui.setUrl(picaddr);//这里是设置返回给UEditor的图片地址
		//这个是UEditor需要的返回值内容,UEditor要的返回值需要封装成Json格式
		String result = JSON.toJSONString(rui);
		response.getWriter().write(result);
	}

	/**
	 * 方法概要: 使用wangEditor富文本编辑器上传图片  上传5
	 * 
	 * 创建时间: 2017-4-19 下午
	 * 
	 * @param String groupName
	 * 
	 * @return filePath
	 * 
	 * @author ShiLei
	 */
	@RequestMapping("/uploadByPluginWang")
	@ResponseBody
	public void uploadByPluginWang(HttpServletRequest request,HttpServletResponse response, String groupName)
			throws Exception {
		   // response.setContentType("textml;charset=UTF-8");
                   // request.setCharacterEncoding("UTF-8");
		   String filePath = fastdfsService.uploadByPlugin(request,groupName);
		   // 返回图片的URL地址
	       response.getWriter().write(filePath);
	}	
	
	/**
	 * 方法概要: 文件下载
	 * 
	 * 创建时间: 2017-6-19 下午
	 * 
	 * @param String filePath
	 *             
	 * @return
	 * 
	 * @author ShiLei
	 */
	@RequestMapping(value = "/downloadFile")
	@ResponseBody
	public void downloadFile(HttpServletResponse response, String filePath) throws IOException{
		
		fastdfsService.downloadFile(response,filePath);
		
	}
	
	/**
	 * 方法概要: 文件刪除
	 * 
	 * 创建时间: 2017-6-19 下午
	 * 
	 * @param String filePath 服务器上该文件路径url(将数组转成json字符串)
	 * 
	 * @return flag 判断文件是否成功删除(0表示成功,-1表示失败)
	 * 
	 * @author ShiLei
	 */
	@RequestMapping(value = "/deleteFile")
	@ResponseBody
	public int deleteFile(String filePath){
		
		int flag=fastdfsService.deleteFile(filePath);
		
		return flag;
	}
	
	/**
	 * 方法概要: 获取指定文件信息
	 * 
	 * 创建时间: 2017-6-19 下午
	 * 
	 * @param String filePath 服务器上该文件路径url
	 * 
	 * @return Map
	 * 
	 * @author ShiLei
	 */
	@RequestMapping(value = "/getFileInfo")
	@ResponseBody
	public Map<String,String> getFileInfo(String filePath){
		
		Map<String,String> map=fastdfsService.getFileInfo(filePath);
		
		return map;
	}
	
	/**
	 * 方法概要: 获取指定文件元信息
	 * 
	 * 创建时间: 2017-6-19 下午
	 * 
	 * @param String filePath 服务器上该文件路径url
	 * 
	 * @return Map
	 * 
	 * @author ShiLei
	 */
	@RequestMapping(value = "/getMetaInfo")
	@ResponseBody
	public Map<String,String> getMetaInfo(String filePath){
		
		Map<String,String> map=fastdfsService.getMetaInfo(filePath);
		
		return map;
	}
	
}

 fastDFS.conf:

connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.nginx_http_port = 8090
tracker_server = 119.90.51.183:22122

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值