JAVA文件上传下载,文件服务器(FASTDFS)
程序员文章站
2022-04-08 09:37:33
...
最近项目里需要文件的上传和下载,起初是把上传的文件都放在业务服务器上的,但是发现后期的文件的量可能逐渐增多,所以需要单独的搭建文件服务器,嗯,选择了fastDFS。
什么是fastDFS和他如何安装的这个地方我就没不去描述了,网上有很多,理解tracker和storage就可以了。
直接说java端如何设计和编码的思想:
文件上传:
对于上传,则是把文件上传的fastDFS文件服务器上,当用户点击保存按钮的时候需要把文件的相关信息保存到业务数据表中,例如文件名,文件大小等等信息。
文件下载:
对于下载,则是调用fastDFS的方法将文件下载到本地,这个时候需要结合上传文件时保存到业务表的信息来下载,例如file_id(fastDFS上面的文件的标识),以及文件名等。
贴代码:
package com.pyg.common.util;
import org.csource.fastdfs.*;
import java.io.File;
import java.io.FileOutputStream;
/**
* @author lf
* @Title: FileUitl
* @Description: 文件上传工具类
* @date 2018/12/24 9:44
*/
public class FileUitl {
private StorageClient1 storageClient1;
public FileUitl(String fastDFSConfigFilePath)throws Exception {
//读取fastDFS配置文件 初始化
if(fastDFSConfigFilePath.contains("classpath:")){
String path = this.getClass().getResource("/").getPath();
fastDFSConfigFilePath = fastDFSConfigFilePath.replace("classpath:", path);
}
System.out.println(fastDFSConfigFilePath);
ClientGlobal.init(fastDFSConfigFilePath);
//获取tracker
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
//获取storage
StorageServer storageServer = null;
storageClient1= new StorageClient1(trackerServer,storageServer);
}
/**
* @Description: 上传文件
* @param fileName 全路径文件名称
* @param fileExt 文件后缀名 不包括 "."
* @return result 文件上传后在服务器的访问路径
* @author lf
* @date 2018/12/24 9:55
*/
public String uploadFile(String fileName,String fileExt) throws Exception {
//上传文件
//文件上传后在服务器的访问路径
String result = storageClient1.upload_file1(fileName, fileExt, null);
return result;
}
/**
* @Description: 上传文件
* @param fileContent 文件内容
* @param extName 文件后缀名 不包括 "."
* @return 文件上传后在服务器的访问路径
* @author lf
* @date 2018/12/24 10:07
*/
public String uploadFile(byte[] fileContent,String extName) throws Exception {
//fileContent是字节数组,可以在这个地方进行异或操作,把文件加密
String result = storageClient1.upload_file1(fileContent, extName, null);
return result;
}
/**
* @Description: 文件下载
* @param fileId 文件服务器上保存的文件id
* @param filePath 全路径文件名称,下载到本地哪里
* @author lf
* @date 2018/12/24 13:57
*/
public void downloadFile(String fileId,String filePath) throws Exception {
FileOutputStream fileOutputStream = new FileOutputStream(new File(filePath));
byte[] bytes = storageClient1.download_file1(fileId);
//如果上传文件时,进行异或操作了,这里也需要异或操作解密
if(bytes!=null&&bytes.length>0){
fileOutputStream.write(bytes);
}
}
}