package com.walker.file.fs;
|
|
import com.walker.file.AbstractFileOperateEngine;
|
import com.walker.file.DefaultFileInfo;
|
import com.walker.file.FileInfo;
|
import com.walker.file.FileOperateException;
|
import com.walker.file.FileStoreType;
|
import com.walker.infrastructure.utils.FileCopyUtils;
|
|
import java.io.BufferedInputStream;
|
import java.io.BufferedOutputStream;
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.io.FileOutputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
|
public abstract class FileSystemOperateEngine extends AbstractFileOperateEngine {
|
|
@Override
|
protected FileInfo acquireFileInfo(String fileName) {
|
return new DefaultFileInfo();
|
}
|
|
@Override
|
protected void executeUpload(InputStream inputStream, FileInfo fileInfo) throws FileOperateException {
|
String directory = this.generateSaveFolder(false);
|
StringBuilder url = new StringBuilder(directory).append(this.getFileName(fileInfo));
|
|
String outputFolder = null;
|
String outputFileName = null;
|
if(!this.getFileRoot().endsWith("/")){
|
outputFileName = this.getFileRoot() + "/" + url.toString();
|
outputFolder = this.getFileRoot() + "/" + directory;
|
} else {
|
outputFileName = this.getFileRoot() + url.toString();
|
outputFolder = this.getFileRoot() + directory;
|
}
|
logger.debug("保存文件名称: " + outputFileName);
|
try {
|
File outputFolderFile = new File(outputFolder);
|
if(!outputFolderFile.exists()){
|
outputFolderFile.mkdirs();
|
}
|
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFileName));
|
long fileSize = FileCopyUtils.copy(inputStream, outputStream);
|
((DefaultFileInfo)fileInfo).setFileSize(fileSize);
|
((DefaultFileInfo)fileInfo).setUrl(url.toString());
|
|
} catch (IOException e) {
|
throw new FileOperateException("保存文件到系统磁盘错误:" + e.getMessage() + ", id=" + fileInfo.getId(), e);
|
}
|
}
|
|
@Override
|
protected byte[] executeDownload(FileInfo fileInfo) throws FileOperateException{
|
String outputFileName = null;
|
if(!this.getFileRoot().endsWith("/")){
|
outputFileName = this.getFileRoot() + "/" + fileInfo.getUrl();
|
} else {
|
outputFileName = this.getFileRoot() + fileInfo.getUrl();
|
}
|
File outputFile = new File(outputFileName);
|
if(!outputFile.exists()){
|
throw new FileOperateException("下载文件不存在,fileId=" + fileInfo.getId() + ", url=" + fileInfo.getUrl(), null);
|
}
|
try {
|
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(outputFile));
|
return FileCopyUtils.copyToByteArray(inputStream);
|
} catch (Exception e) {
|
throw new FileOperateException("下载文件流出错, error=" + e.getMessage(), e);
|
}
|
}
|
|
@Override
|
public FileStoreType getFileStoreType() {
|
return FileStoreType.FileSystem;
|
}
|
}
|