@RequestMapping("/api.com.o2o.order.detail.getOrderContractByFileId/1.0.0")
public void getOrderContractByFileId( RopOrderContractRequest request, HttpServletResponse response) {
String validate = validateOrderContractRequest(request);
if (!StringUtils.isBlank(validate)) {
LOGGER.info("根据文件id获取合同验证不通过,文件ID为:" + request.getFileId());
}
ComFile file = null;
try {
file = fsClient.downloadFile(request.getFileId());
} catch (Exception e) {
LOGGER.error("根据文件id获取合同异常,文件号为:" + request.getFileId() + "e:" + e.getMessage(), e);
}
if(file == null){
return;
}
byte[] fileByte = file.getFileData();
if(fileByte==null || fileByte.length ==0){
return;
}
response.setContentType("application/pdf");
ServletOutputStream sos = null;
try {
sos = response.getOutputStream();
// 设置浏览器不要缓存此图片
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 结束图像的绘制过程,完成图像
response.setContentLength(fileByte.length);
// 将图像输出到客户端
sos.write(fileByte);
} catch (Exception ex){
LOGGER.error("根据文件id获取合同,输出异常,文件号为:" + request.getFileId() + "e:" + ex.getMessage(), ex);
} finally {
if(sos != null){
try {
sos.flush();
} catch (IOException e) {
LOGGER.error("根据文件id获取合同,刷新异常,文件号为:" + request.getFileId() + "e:" + e.getMessage(), e);
}
try {
sos.close();
} catch (IOException e) {
LOGGER.error("根据文件id获取合同,关闭异常,文件号为:" + request.getFileId() + "e:" + e.getMessage(), e);
}
}
}
}
@RequestMapping("/api.com.o2o.order.detail.uploadOrderAttachmentFile/1.0.0")
@ResponseBody
public RopResponse<RopFileResponse> uploadOrderAttachmentFile(RopFileRequest request) {
String validate = null;
// String validate = validateOrderAttachmentImage(request);
if (!StringUtils.isBlank(validate)) {
LOGGER.info("订单上传文件验证不通过,订单号为:" + request.getOrderId());
return RopResponse.error("-1", validate, null);
}
Long fileId = 0L;
try {
CommonsMultipartFile file = request.getAttachmentFile();
LOGGER.info("订单上传文件系统,file.getOriginalFilename():" + file.getOriginalFilename() + "file.getInputStream():" + file.getFileItem().getInputStream());
if(file.getSize() > 20*1024*1024) {
LOGGER.info("订单上传文件过大,订单号为:" + request.getOrderId());
return RopResponse.error("-1", "订单上传文件过大", null);
}
fileId = fsClient.uploadFile(file.getOriginalFilename(), file.getFileItem().getInputStream(), "COM_AFFIX");
} catch (Exception e) {
LOGGER.info("订单上传文件系统异常,订单号为:" + request.getOrderId() + "e:" + e);
e.printStackTrace();
return RopResponse.error("-1", "订单上传文件系统异常", e.getMessage());
}
if (fileId == 0) {
LOGGER.info("订单上传文件返回文件id为空,订单号为:" + request.getOrderId());
return RopResponse.error("-1", "订单上传文件返回文件id为空", null);
}
OrderRequestBaseVo orderRequestBaseVo = new OrderRequestBaseVo();
orderRequestBaseVo.setBackUserId(request.getBackUserId());
OrderAttachmentVo orderAttachmentVo = new OrderAttachmentVo();
orderAttachmentVo.setAttachmentName(request.getAttachmentFileName());
orderAttachmentVo.setAttachmentType(request.getAttachmentType());
orderAttachmentVo.setOrderId(request.getOrderId());
orderAttachmentVo.setFileId(fileId);
orderAttachmentVo.setCreateTime(new Date());
ApiResultHandle resultHandle = orderO2ODao.uploadCertificate(orderRequestBaseVo, orderAttachmentVo);
RopFileResponse fileResponse = new RopFileResponse();
if (resultHandle == null || resultHandle.isFail() || (resultHandle != null && !StringUtils.isBlank(resultHandle.getMsg()))) {
LOGGER.info("订单上传保存报错,订单号为:" + request.getOrderId());
return RopResponse.error("-1", "订单上传保存报错", null);
} else {
fileResponse.setSuccessFlag(true);
fileResponse.setFileId(fileId);
}
return RopResponse.success(fileResponse);
}
配置:
<!--文件服务,将其注入为bean -->
<bean id="fsClient" class="com.lvmama.comm.pet.client.FSClient" >
<property name="comFSRemoteService" ref="comFSService"/>
</bean>
<!-- 调用主站文件服务 -->
<dubbo:reference id="comFSService" interface="com.lvmama.comm.pet.service.pub.ComFSService"/>
package com.lvmama.comm.pet.client;
import com.lvmama.comm.lang.utils.DateUtil;
import com.lvmama.comm.lang.utils.StringUtil;
import com.lvmama.comm.pet.po.pub.ComFSConfig;
import com.lvmama.comm.pet.po.pub.ComFSFile;
import com.lvmama.comm.pet.po.pub.ComFSServiceConfig;
import com.lvmama.comm.pet.service.pub.ComFSService;
import com.lvmama.comm.pet.vo.ComFile;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketException;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class FSClient
{
private static Log logger = LogFactory.getLog(FSClient.class);
private ComFSService comFSRemoteService;
public Long uploadFile(String fileName, InputStream inputStream, String serverType, String subFolder)
{
Long result = Long.valueOf(0L);
boolean flag = false;
if ((inputStream != null) && (fileName != null))
{
ComFSServiceConfig comFSServiceConfig = this.comFSRemoteService.selectComFSServiceConfigByServerType(serverType);
if (comFSServiceConfig != null)
{
FTPClient ftpClient = connectServer(comFSServiceConfig.getFsId());
if (ftpClient != null) {
try
{
String dateStr = subFolder;
String distFolder = comFSServiceConfig.getRootDir();
distFolder = StringUtil.trimFirstAndLastChar(distFolder, '/');
String[] distDirs = distFolder.split("/");
for (String dir : distDirs) {
if (!ftpClient.changeWorkingDirectory(dir))
{
ftpClient.makeDirectory(dir);
ftpClient.changeWorkingDirectory(dir);
}
}
if (!ftpClient.changeWorkingDirectory(dateStr))
{
ftpClient.makeDirectory(dateStr);
ftpClient.changeWorkingDirectory(dateStr);
}
ComFSFile fsFile = new ComFSFile();
String serverFileName = System.currentTimeMillis() + "-" + fileName;
fsFile.setFsId(comFSServiceConfig.getFsId());
fsFile.setFileName(fileName);
fsFile.setServerFileName(serverFileName);
fsFile.setFilePath(distFolder + "/" + dateStr);
fsFile.setInsertedTime(new Date());
flag = ftpClient.storeFile(new String(serverFileName.getBytes("UTF-8"), "ISO-8859-1"), inputStream);
if (flag)
{
logger.info(serverFileName + " uploads success!");
result = this.comFSRemoteService.insertComFSFile(fsFile);
}
else
{
logger.error(serverFileName + " uploads failed!");
}
ftpClient.logout();
ftpClient.disconnect();
}
catch (Exception e)
{
logger.error(e);
}
}
}
else
{
logger.info("Con't find FSServiceConfig serverType is " + serverType);
}
}
else
{
logger.info("fileName or fileData is null,please double check");
}
return result;
}
public Long uploadFile(String fileName, InputStream inputStream, String serverType)
{
Long result = Long.valueOf(0L);
boolean flag = false;
if ((inputStream != null) && (fileName != null))
{
ComFSServiceConfig comFSServiceConfig = this.comFSRemoteService.selectComFSServiceConfigByServerType(serverType);
if (comFSServiceConfig != null)
{
FTPClient ftpClient = connectServer(comFSServiceConfig.getFsId());
if (ftpClient != null) {
try
{
String dateStr = DateUtil.formatDate(new Date(), "yyyyMMdd");
String distFolder = comFSServiceConfig.getRootDir();
distFolder = StringUtil.trimFirstAndLastChar(distFolder, '/');
String[] distDirs = distFolder.split("/");
for (String dir : distDirs) {
if (!ftpClient.changeWorkingDirectory(dir))
{
ftpClient.makeDirectory(dir);
ftpClient.changeWorkingDirectory(dir);
}
}
if (!ftpClient.changeWorkingDirectory(dateStr))
{
ftpClient.makeDirectory(dateStr);
ftpClient.changeWorkingDirectory(dateStr);
}
ComFSFile fsFile = new ComFSFile();
String serverFileName = System.currentTimeMillis() + "-" + fileName;
fsFile.setFsId(comFSServiceConfig.getFsId());
fsFile.setFileName(fileName);
fsFile.setServerFileName(serverFileName);
fsFile.setFilePath(distFolder + "/" + dateStr);
fsFile.setInsertedTime(new Date());
flag = ftpClient.storeFile(new String(serverFileName.getBytes("UTF-8"), "ISO-8859-1"), inputStream);
if (flag)
{
logger.info(serverFileName + " uploads success!");
result = this.comFSRemoteService.insertComFSFile(fsFile);
}
else
{
logger.error(serverFileName + " uploads failed!");
}
ftpClient.logout();
ftpClient.disconnect();
}
catch (Exception e)
{
logger.error(e);
}
}
}
else
{
logger.info("Con't find FSServiceConfig serverType is " + serverType);
}
}
else
{
logger.info("fileName or fileData is null,please double check");
}
return result;
}
public Long uploadFile(String fileName, byte[] fileData, String serverType)
throws Exception
{
if ((fileData != null) && (fileName != null))
{
InputStream input = new ByteArrayInputStream(fileData);
Long fileId = uploadFile(fileName, input, serverType);
input.close();
return fileId;
}
logger.error("fileName or fileData is null,please double check");
return Long.valueOf(0L);
}
public Long uploadFile(File localFile, String serverType)
throws Exception
{
Long result = Long.valueOf(0L);
if (localFile.exists())
{
InputStream input = new FileInputStream(localFile);
Long fileId = uploadFile(localFile.getName(), input, serverType);
input.close();
return fileId;
}
logger.error("Local File " + localFile.getPath() + " does't exist!");
return result;
}
public ComFile downloadFile(Long fileId)
{
return downloadFile(fileId, true);
}
public ComFile downloadFile(Long fileId, boolean output)
{
ComFile comFile = new ComFile();
ComFSFile comFSFile = this.comFSRemoteService.selectComFSFileById(fileId);
if (comFSFile != null)
{
Long fsId = comFSFile.getFsId();
comFile.setFileName(comFSFile.getFileName());
comFile.setFileData(new byte[0]);
FTPClient ftpClient = connectServer(fsId);
if (ftpClient != null) {
try
{
if (ftpClient.changeWorkingDirectory(comFSFile.getFilePath()))
{
FTPFile[] fs = ftpClient.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(comFSFile.getServerFileName()))
{
OutputStream os = new ByteArrayOutputStream();
ftpClient.retrieveFile(new String(ff.getName().getBytes("UTF-8"), "ISO-8859-1"), os);
ByteArrayOutputStream bos = (ByteArrayOutputStream)os;
comFile.setFileData(bos.toByteArray());
if (output) {
comFile.setOutputStream(os);
}
os.close();
bos.close();
ftpClient.logout();
ftpClient.disconnect();
logger.info("Download file : fileId " + fileId + " success!");
return comFile;
}
}
}
else
{
logger.error("cd dir " + comFSFile.getFilePath() + " failed!");
}
}
catch (Exception e)
{
logger.error(e);
}
}
}
else
{
logger.error("File does't exist FileId is " + fileId);
}
return comFile;
}
public ComFile downloadFile(Long fsId, String dirName, String filePath, String fileName)
{
ComFile comFile = new ComFile();
comFile.setFileName(fileName);
comFile.setFileData(new byte[0]);
FTPClient ftpClient = connectServer(fsId);
if (ftpClient != null) {
try
{
if (ftpClient.changeWorkingDirectory(filePath))
{
FTPFile[] fs = ftpClient.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(fileName))
{
OutputStream os = new ByteArrayOutputStream();
ftpClient.retrieveFile(new String(ff.getName().getBytes("UTF-8"), "ISO-8859-1"), os);
ByteArrayOutputStream bos = (ByteArrayOutputStream)os;
comFile.setFileData(bos.toByteArray());
comFile.setOutputStream(os);
os.close();
bos.close();
ftpClient.logout();
ftpClient.disconnect();
logger.info("Download file : fileName " + fileName + " success!");
return comFile;
}
}
}
else
{
logger.error("cd dir " + filePath + " failed!");
}
}
catch (Exception e)
{
logger.error(e);
}
}
return comFile;
}
private FTPClient connectServer(Long fsId)
{
FTPClient ftpClient = null;
ComFSConfig fsConfig = null;
try
{
fsConfig = this.comFSRemoteService.selectFSCofigById(fsId);
if (fsConfig != null)
{
ftpClient = new FTPClient();
ftpClient.setConnectTimeout(30000);
ftpClient.setDefaultPort(fsConfig.getFsPort());
ftpClient.configure(getFtpConfig(fsConfig));
ftpClient.connect(fsConfig.getFsIP());
ftpClient.login(fsConfig.getFtpUsername(), fsConfig.getFtpPassword());
int reply = ftpClient.getReplyCode();
ftpClient.setDataTimeout(12000);
ftpClient.setFileType(2);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileTransferMode(10);
ftpClient.setControlEncoding("UTF-8");
if (!FTPReply.isPositiveCompletion(reply))
{
ftpClient.disconnect();
logger.error(fsConfig.getFsIP() + " FTP rejected the connection!");
ftpClient = null;
}
else
{
logger.info(fsConfig.getFsIP() + " FTP connects success!");
}
}
else
{
ftpClient = null;
logger.error("Con't find FSConfig fsId is " + fsId);
}
}
catch (SocketException e)
{
ftpClient = null;
logger.error("FTP upload Exception: " + StringUtil.printParam(fsConfig));
logger.error(FSClient.class, e);
}
catch (IOException e)
{
ftpClient = null;
logger.error("FTP upload Exception: " + StringUtil.printParam(fsConfig));
logger.error(FSClient.class, e);
}
return ftpClient;
}
private FTPClientConfig getFtpConfig(ComFSConfig fsConfig)
{
FTPClientConfig ftpConfig = new FTPClientConfig(fsConfig.getFtpOSType().toUpperCase());
if (fsConfig.getFtpDefaultControlEncoding() != null) {
ftpConfig.setServerLanguageCode(fsConfig.getFtpDefaultControlEncoding());
} else {
ftpConfig.setServerLanguageCode("ISO-8859-1");
}
return ftpConfig;
}
public ComFSService getComFSRemoteService()
{
return this.comFSRemoteService;
}
public void setComFSRemoteService(ComFSService comFSRemoteService)
{
this.comFSRemoteService = comFSRemoteService;
}
}
package com.lvmama.comm.pet.vo;
import com.lvmama.comm.lang.utils.FileUtil;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class ComFile
implements Serializable
{
private static final long serialVersionUID = -403578180953080397L;
private static Log logger = LogFactory.getLog(ComFile.class);
String fileName;
byte[] fileData;
OutputStream outputStream;
File file;
public String getFileName()
{
return this.fileName;
}
public void setFileName(String fileName)
{
this.fileName = fileName;
}
public byte[] getFileData()
{
return this.fileData;
}
public void setFileData(byte[] fileData)
{
this.fileData = fileData;
}
public OutputStream getOutputStream()
{
return this.outputStream;
}
public void setOutputStream(OutputStream outputStream)
{
this.outputStream = outputStream;
}
public InputStream getInputStream()
{
return new ByteArrayInputStream(this.fileData);
}
public File getFile()
{
try
{
String abstractFileName = System.getProperty("java.io.tmpdir") + "/" + this.fileName;
return FileUtil.writeBytesToFile(this.fileData, abstractFileName);
}
catch (Exception e)
{
logger.error(e);
}
return null;
}
public void setFile(File file)
{
this.file = file;
}
}