package com.artfess.file.attachmentService; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import com.artfess.file.params.FlowUploadPropertiesStorageDTO; import org.springframework.stereotype.Service; import com.artfess.base.attachment.Attachment; import com.artfess.base.attachment.AttachmentService; import com.artfess.base.util.AppUtil; import com.artfess.base.util.BeanUtils; import com.artfess.base.util.FileUtil; import com.artfess.base.util.StringUtil; import com.artfess.file.model.FlowUploadProperties; import com.artfess.file.persistence.manager.FlowUploadPropertiesManager; import com.artfess.file.util.AppFileUtil; @Service public class FolderAttachmentServiceImpl implements AttachmentService{ public FolderAttachmentServiceImpl(){ } public void remove(Attachment attachment,String propertiesId) throws Exception { String attachPath = getAttachPath(propertiesId,attachment); String filePath = attachment.getFilePath(); if(!attachment.getEntryptName()){ filePath = filePath.replace(attachment.getId(), attachment.getFileName()); } String fullPath = attachPath + File.separator + filePath; // 删除文件 FileUtil.deleteFile(fullPath); } @Override public void upload(Attachment attachment, InputStream inputStream,String propertiesId) throws Exception { String filePath = attachment.getFilePath(); String attachPath = getAttachPath(propertiesId,attachment); if(!attachment.getEntryptName()){ filePath = filePath.replace(attachment.getId(), attachment.getFileName()); } filePath=attachPath+File.separator+filePath; if(BeanUtils.isNotEmpty(inputStream)) { FileUtil.createFolderFile(filePath); FileUtil.writeFile(filePath, inputStream); } else { FileUtil.writeByte(filePath, attachment.getBytes()); } } public void download(Attachment attachment, OutputStream outStream,String propertiesId) throws Exception { String filePath = attachment.getFilePath(); String attachPath = getAttachPath(propertiesId,attachment); if(!attachment.getEntryptName()){ filePath = filePath.replace(attachment.getId(), attachment.getFileName()); } filePath=attachPath+File.separator+filePath; String fullPath = filePath.replace("/", File.separator); File file = new File(fullPath); if (file.exists()) { FileInputStream inputStream = null; try{ inputStream = new FileInputStream(fullPath); byte[] b = new byte[1024]; int i = 0; while ((i = inputStream.read(b)) > 0) { outStream.write(b, 0, i); } outStream.flush(); }catch(Exception e){ throw e; }finally{ if (inputStream != null) { inputStream.close(); inputStream = null; } if (outStream != null) { outStream.close(); outStream = null; } } }else { throw new RuntimeException("该附件不存在"); } } @Override public String getStoreType() { return "folder"; } @Override public boolean chekckFile(Attachment attachment,String propertiesId) { String filePath = attachment.getFilePath(); String attachPath = getAttachPath(propertiesId,attachment); if(!attachment.getEntryptName()){ filePath = filePath.replace(attachment.getId(), attachment.getFileName()); } filePath=attachPath+File.separator+filePath; String fullPath = filePath.replace("/", File.separator); File file = new File(fullPath); return file.exists(); } /** * 获取文件上传根目录 * @param propertiesId * @return */ private String getAttachPath(String propertiesId,Attachment attachment){ FlowUploadPropertiesStorageDTO uploadProperties = getUploadProperties(propertiesId); String attachPath = ""; if(BeanUtils.isNotEmpty(uploadProperties)){ attachPath = uploadProperties.getLocation(); attachment.setEntryptName(uploadProperties.getEncryptName()==0?false:true); }else{ attachPath = AppFileUtil.getAttachPath(); } return attachPath; } /** * 根据配置id获取文件上传配置 * @param propertiesId * @return */ private FlowUploadPropertiesStorageDTO getUploadProperties(String propertiesId){ if(StringUtil.isEmpty(propertiesId)){ return null; } FlowUploadPropertiesManager uploadPropertiesManager = AppUtil.getBean(FlowUploadPropertiesManager.class); return uploadPropertiesManager.getById(propertiesId); } @Override public byte[] getFileBytes(Attachment sysFile) throws Exception { String filePath = sysFile.getFilePath(); String fullPath = StringUtil.trimSufffix(AppFileUtil.getAttachPath(), File.separator) + File.separator + filePath.replace("/", File.separator); File file = new File(fullPath); if (file.exists()) { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); FileInputStream inputStream = null; try { inputStream = new FileInputStream(fullPath); byte[] b = new byte[1024]; int i = 0; while ((i = inputStream.read(b)) > 0) { outStream.write(b, 0, i); } outStream.flush(); return outStream.toByteArray(); } catch (Exception e) { throw e; } finally { if (inputStream != null) { inputStream.close(); inputStream = null; } if (outStream != null) { outStream.close(); outStream = null; } } } else { throw new RuntimeException("该附件不存在"); } } @Override public String getUrl(Attachment attachment) { return null; } @Override public String initMultiPartUpload(Attachment attachment) { return null; } @Override public String getChunkUrl(Attachment attachment, Integer partNumber, String uploadId) { return null; } @Override public boolean mergeMultipartUpload(Attachment attachment, String uploadId, int realyPartNumber) { return false; } }