文件服务器

@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;
  }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值