加入依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
工具类
public class FastdfsUtil {
public static FileDto uploadFile(String trackerUrl, MultipartFile multipartFile) throws IOException, MyException {
ClientGlobal.initByTrackers(trackerUrl);
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getTrackerServer();
StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
StorageClient1 client = new StorageClient1(trackerServer, storageServer);
String fileName = multipartFile.getOriginalFilename();
String fileExtName = fileName.substring(fileName.lastIndexOf(".") + 1);
NameValuePair[] metaList = new NameValuePair[3];
metaList[0] = new NameValuePair("fileName", fileName);
metaList[1] = new NameValuePair("fileExtName", fileExtName);
metaList[2] = new NameValuePair("fileLength", String.valueOf(multipartFile.getBytes().length));
String fileId = client.upload_file1(multipartFile.getBytes(), fileExtName, metaList);
FileDto fileDto = new FileDto();
fileDto.setFileUrl(fileId);
fileDto.setFileName(fileName);
return fileDto;
}
public static FastdfsFileInfo download(String trackerUrl, String fileId) throws IOException, MyException {
ClientGlobal.initByTrackers(trackerUrl);
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getTrackerServer();
StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
StorageClient1 client = new StorageClient1(trackerServer, storageServer);
byte[] bytes = client.download_file1(fileId);
if (bytes == null) {
return new FastdfsFileInfo();
}
NameValuePair[] metadata1 = client.get_metadata1(fileId);
return new FastdfsFileInfo(bytes, metadata1);
}
@Data
@NoArgsConstructor
public static class FastdfsFileInfo {
private byte[] file;
private String fileName;
private String fileExtName;
private String fileLength;
public Boolean fileExist() {
return file != null;
}
public FastdfsFileInfo(byte[] file, NameValuePair[] metaList) {
this.file = file;
if (metaList != null) {
for (NameValuePair nameValuePair : metaList) {
switch (nameValuePair.getName()) {
case "fileName":
this.fileName = nameValuePair.getValue();
break;
case "fileExtName":
this.fileExtName = nameValuePair.getValue();
break;
case "fileLength":
this.fileLength = nameValuePair.getValue();
break;
default:
break;
}
}
}
}
}
}
根据fastdfs的url 打包下载文件
public class ZipUtil {
public static String serverUrl = "xx.xx.xx.xx:22122";
public static HttpServletResponse downLoadFiles(List<String> files, HttpServletResponse response,String etpName,HttpServletRequest request)throws Exception {
try {
String zipFilename = "/usr/local/sti/"+etpName+".zip" ;
File file = new File(zipFilename);
if (!file.exists()){
file.createNewFile();
}
FileOutputStream fous = new FileOutputStream(file);
ZipOutputStream zipOut = new ZipOutputStream(fous);
zipFile(files, zipOut);
zipOut.close();
fous.close();
return downloadZip(file,response,request);
}catch (Exception e) {
e.printStackTrace();
}
return response ;
}
public static void zipFile (List<String> files,ZipOutputStream outputStream) {
for(String file : files) {
zipFile(file, outputStream);
}
}
public static void zipFile(String inputFile, ZipOutputStream ouputStream) {
try {
FastdfsUtil.FastdfsFileInfo download = FastdfsUtil.download(serverUrl, inputFile);
if(download.fileExist()) {
byte[] file = download.getFile();
Random random = new Random();
ZipEntry entry = new ZipEntry(random.nextInt(10)+download.getFileName());
ouputStream.putNextEntry(entry);
ouputStream.write(file);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static HttpServletResponse downloadZip(File file, HttpServletResponse response, HttpServletRequest request) {
if (file.exists() == false) {
log.error("待压缩的文件目录:" + file + "不存在.");
} else {
try {
InputStream fis = new BufferedInputStream(new FileInputStream(file.getPath()));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
String userAgent = request.getHeader("User-Agent");
String fileName = null;
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
fileName = URLEncoder.encode(file.getName(), "UTF-8");
} else {
fileName = new String(file.getName().getBytes("UTF-8"), "ISO-8859-1");
}
response.setHeader("Content-Disposition", "attachment;filename="
+ fileName);
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
File f = new File(file.getPath());
f.delete();
} catch (Exception e) {
log.info("压缩文件失败");
e.printStackTrace();
}
}
}
return response;
}
public static void downCfg(String fileName, HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
String userAgent = request.getHeader("User-Agent");
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
fileName = URLEncoder.encode(fileName, "UTF-8");
} else {
fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
}
response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", fileName));
response.setContentType("application/octet-stream;charset=utf-8");
response.setCharacterEncoding("UTF-8");
}
}