基于cxf的app文件上传接口(带回显功能)

一身转战三千里,一剑曾百万师。这篇文章主要讲述基于cxf的app文件上传接口(带回显功能)相关的知识,希望能为你提供帮助。
1.SaleImpl

@Override public String uploadPic(final List< Attachment> attachments) { return this.filterException(new MethodCallBack() {@Override public String doProcessMethod() throws Exception { List< FileUploadVo> fileVos = transform2FileUploadVo(attachments); String rs = nhSalePerformancePicIService.saveUploadPic(fileVos); return rs; } }); }

这里的实体 Attachment 类是cxf提供的附件类    org.apache.cxf.jaxrs.ext.multipart.Attachment
 
2.附件转换方法  transform2FileUploadVo    BaseWsServer.java
package cn.maitian.newhouse.framework.core.base.ws; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import javax.activation.DataHandler; import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.cxf.message.Message; import org.apache.cxf.phase.PhaseInterceptorChain; import org.apache.log4j.Logger; import cn.maitian.core.persistence.db.JugHelper; import cn.maitian.newhouse.framework.core.base.bean.MethodCallBack; import cn.maitian.newhouse.framework.core.base.bean.WsResultJson; import cn.maitian.newhouse.framework.core.base.vo.FileUploadVo; import cn.maitian.newhouse.framework.core.exception.AppClientException; import cn.maitian.newhouse.framework.core.exception.AppSysException; import cn.maitian.newhouse.framework.core.i18n.IAppPropertiesMsg; import cn.maitian.newhouse.framework.core.util.AppFileUploadUtils; import cn.maitian.newhouse.framework.system.model.NhAttachment; /** * WebService服务端基础类 * * @author LXINXIN * @company MAITIAN * @version 1.0 */ public class BaseWsServer {/** * 日志 */ protected final Logger logger = Logger.getLogger(getClass()); /** * 处理客服端异常信息 */ private IAppPropertiesMsg appExceptionClientMsg; /** * 处理系统端异常信息 */ private IAppPropertiesMsg appExceptionSystemMsg; /** * 过滤文本格式 */ final static String[] TEXT_TYPE = new String[] { "text/plain", "text/plain; charset=utf-8" }; /** * < h1> 统一处理异常和记录日志< /h1> * * @param callback *MethodCallBack 通过doProcessMethod进行逻辑的处理 * @return ResultJson */ public String filterException(MethodCallBack callback) { String msg = ""; String code = ""; try { // 获取拦截器message内容 Message message = PhaseInterceptorChain.getCurrentMessage(); AppSysException se = message.getContent(AppSysException.class); // 内容不为空,则证明拦截器异常,抛出异常信息 if (se != null) { // 不要再注释掉提交到CVS上了,个人调试可以注释掉 throw se; } return callback.doProcessMethod(); } catch (AppClientException ce) { ce.printStackTrace(); logger.error(ce); code = ce.getCode(); String[] params = ce.getParams(); msg = appExceptionClientMsg.getMessage(code, params); } catch (AppSysException se) { se.printStackTrace(); logger.error(se); code = se.getCode(); String[] params = se.getParams(); msg = appExceptionSystemMsg.getMessage(code, params); } catch (Exception e) { e.printStackTrace(); logger.error(e); code = "CE900000"; msg = appExceptionClientMsg.getMessage(code); } return WsResultJson.failure(msg, null, code); }/** * 附件转换 * * @param attachments *附件集合 * @return List 文件上传的值对象集合 */ protected List< FileUploadVo> transform2FileUploadVo(List< Attachment> attachments) throws IOException { if (attachments == null || attachments.size() < = 0) { return null; } List< FileUploadVo> result = new ArrayList< FileUploadVo> (); for (Attachment attachment : attachments) { FileUploadVo fuv = new FileUploadVo(); // 获取表单文本域类型 String contentType = attachment.getContentType().toString(); // 过滤非文件类型 if (Arrays.asList(TEXT_TYPE).contains(contentType.toLowerCase())) { continue; } DataHandler dh = attachment.getDataHandler(); fuv.setInputStream(dh.getInputStream()); // 获取上传的原文件名 String oldFileName = dh.getName(); String originalFileName = AppFileUploadUtils.getOriginalFileName(oldFileName); // 获取文件源文件后缀名 String fileExtendName = AppFileUploadUtils.getFileExtension(oldFileName); // 生成新文件名 String newFileName = JugHelper.generalUUID(); NhAttachment lvAttachment = new NhAttachment(); lvAttachment.setId(newFileName); lvAttachment.setOriginalFileName(originalFileName); lvAttachment.setStorageFileName(newFileName); lvAttachment.setFileExtendName(fileExtendName); lvAttachment.setFileSize(null); lvAttachment.setUploadFilePath(null); lvAttachment.setUploadTime(null); lvAttachment.setStateSign(NhAttachment.STATE_SIGN_USE); fuv.setAttachment(lvAttachment); result.add(fuv); } return result; }/** * @return the appExceptionClientMsg */ public IAppPropertiesMsg getAppExceptionClientMsg() { return appExceptionClientMsg; }/** * @param appExceptionClientMsg *the appExceptionClientMsg to set */ public void setAppExceptionClientMsg(IAppPropertiesMsg appExceptionClientMsg) { this.appExceptionClientMsg = appExceptionClientMsg; }/** * @return the appExceptionSystemMsg */ public IAppPropertiesMsg getAppExceptionSystemMsg() { return appExceptionSystemMsg; }/** * @param appExceptionSystemMsg *the appExceptionSystemMsg to set */ public void setAppExceptionSystemMsg(IAppPropertiesMsg appExceptionSystemMsg) { this.appExceptionSystemMsg = appExceptionSystemMsg; }protected String getThreadId() { String qid = "[" + Thread.currentThread().getId() + ":@" + new Date().getTime() + "@]"; logger.error("---action in---> " + qid); return qid; }protected String getMethodDebugMsg(String qid, long startTime, String msg) { long endTime = System.currentTimeMillis(); logger.error(msg + "---aticon method out---> " + qid + " {" + (endTime - startTime) + "}"); return qid; }protected String getActionDebugMsg(String qid, long startTime, String msg) { long endTime = System.currentTimeMillis(); logger.error(msg + "---action out total time---> " + qid + " {" + (endTime - startTime) + "}"); return qid; }}

FileUploadVo.java
package cn.maitian.newhouse.framework.core.base.vo; import java.io.InputStream; import java.io.Serializable; import cn.maitian.newhouse.framework.system.model.NhAttachment; /** * 文件上传的值对象 * * @author LXINXIN * @company MAITIAN * @version 1.0 */ public class FileUploadVo implements Serializable{/** * */ private static final long serialVersionUID = -3384430691991762476L; /** * 文件的IO流 */ private InputStream inputStream; /** * 附件 */ private NhAttachment attachment; /** * @return the inputStream */ public InputStream getInputStream() { return inputStream; }/** * @param inputStream *the inputStream to set */ public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; }/** * @return the attachment */ public NhAttachment getAttachment() { return attachment; }/** * @param attachment *the attachment to set */ public void setAttachment(NhAttachment attachment) { this.attachment = attachment; }}

NhAttachment.java
package cn.maitian.newhouse.framework.system.model; import java.io.Serializable; import cn.maitian.newhouse.framework.core.base.model.BaseEntity; import cn.maitian.webx.model.IDomainObject; /** * 附件数据信息实体 * * @author MGS * @company ISOFTSTONE * @version 1.0 */ public class NhAttachment extends BaseEntity implements IDomainObject, Serializable {private static final long serialVersionUID = 875425364068338655L; /** * 状态标志 0表示正常,1代表停用,默认是0 */ public static final int STATE_SIGN_USE = 0; /** * 不可用状态 */ public static final int STATE_SIGN_STOP = 1; /** * 文件ID号 */ private String id; /** * 原始文件名 */ private String originalFileName; /** * 新文件名 */ private String storageFileName; /** * 文件扩展名 */ private String fileExtendName; /** * 文件尺寸,按字节存储 */ private Long fileSize; /** * 上传文件路径 */ private String uploadFilePath; /** * 上传时间 */ private java.util.Date uploadTime; /** * 状态标志,此字段预留,0表示正常,1代表停用,默认是0 */ private Integer stateSign; /** * 临时字段、存储当前图片是第几张 */ private Integer sortNum; /** * 上传后图片服务器访问路径 */ private String accessFilePath; /** * @return the id */ public String getId() { return id; }/** * @param id *the id to set */ public void setId(String id) { this.id = id; }/** * @return the originalFileName */ public String getOriginalFileName() { return originalFileName; }/** * @param originalFileName *the originalFileName to set */ public void setOriginalFileName(String originalFileName) { this.originalFileName = originalFileName; }/** * @return the storageFileName */ public String getStorageFileName() { return storageFileName; }/** * @param storageFileName *the storageFileName to set */ public void setStorageFileName(String storageFileName) { this.storageFileName = storageFileName; }/** * @return the fileExtendName */ public String getFileExtendName() { return fileExtendName; }/** * @param fileExtendName *the fileExtendName to set */ public void setFileExtendName(String fileExtendName) { this.fileExtendName = fileExtendName; }/** * @return the uploadFilePath */ public String getUploadFilePath() { return uploadFilePath; }/** * @param uploadFilePath *the uploadFilePath to set */ public void setUploadFilePath(String uploadFilePath) { this.uploadFilePath = uploadFilePath; }/** * @return the uploadTime */ public java.util.Date getUploadTime() { return uploadTime; }/** * @param uploadTime *the uploadTime to set */ public void setUploadTime(java.util.Date uploadTime) { this.uploadTime = uploadTime; }/** * @return the stateSign */ public Integer getStateSign() { return stateSign; }/** * @param stateSign *the stateSign to set */ public void setStateSign(Integer stateSign) { this.stateSign = stateSign; }/** * @return the fileSize */ public Long getFileSize() { return fileSize; }/** * @param fileSize *the fileSize to set */ public void setFileSize(Long fileSize) { this.fileSize = fileSize; // 设置默认值 if (this.fileSize == null) { this.fileSize = 0L; } }/** * 拼接为完整文件名 * * @return 完整文件名 */ public String getFullFileName() { return this.storageFileName + "." + this.fileExtendName; }/** * @return the sortNum */ public Integer getSortNum() { return sortNum; }/** * @param sortNum *the sortNum to set */ public void setSortNum(Integer sortNum) { this.sortNum = sortNum; }/** * @return the accessFilePath */ public String getAccessFilePath() { return accessFilePath; }/** * @param accessFilePath *the accessFilePath to set */ public void setAccessFilePath(String accessFilePath) { this.accessFilePath = accessFilePath; }}

 
3.上传方法  saveUploadPic
NhSalePerformancePicServiceImpl
package cn.maitian.newhouse.modules.salePerformancepic.service.impl; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import cn.maitian.newhouse.framework.core.base.bean.WsResultJson; import cn.maitian.newhouse.framework.core.base.service.impl.BaseServiceImpl; import cn.maitian.newhouse.framework.core.base.vo.FileUploadVo; import cn.maitian.newhouse.framework.core.exception.AppSysException; import cn.maitian.newhouse.framework.core.util.AppFileUploadUtils; import cn.maitian.newhouse.framework.core.util.AppFileUploadUtils.ImageType; import cn.maitian.newhouse.framework.core.util.AppPropUtil; import cn.maitian.newhouse.framework.system.dao.NhAttachmentIDao; import cn.maitian.newhouse.framework.system.model.NhAttachment; import cn.maitian.newhouse.modules.salePerformancepic.dao.NhSalePerformancePicIDao; import cn.maitian.newhouse.modules.salePerformancepic.model.NhSalePerformancePic; import cn.maitian.newhouse.modules.salePerformancepic.service.NhSalePerformancePicIService; import cn.maitian.webx.support.Page; /** * * * @company * @version 1.0 */ public class NhSalePerformancePicServiceImpl extends BaseServiceImpl implements NhSalePerformancePicIService {/** * Spring注入 */ private NhSalePerformancePicIDao nhSalePerformancePicIDao; private NhAttachmentIDao nhAttachmentIDao; @Override public String saveUploadPic(List< FileUploadVo> fileVos) { if (fileVos == null || fileVos.isEmpty()) { return null; } // 返回的结果信息 List< Map< String,Object> > rs = new ArrayList< Map< String,Object> > (); // 按日期生成文件夹 Integer sortNum = 1; for (FileUploadVo fuv : fileVos) { InputStream ins = fuv.getInputStream(); NhAttachment attachment = fuv.getAttachment(); String fullFileName = attachment.getStorageFileName() + "." + attachment.getFileExtendName(); // 文件上传 Map< String, String> uploadResult = null; try { uploadResult = AppFileUploadUtils.upload(ins, fullFileName); } catch (IOException e) { e.printStackTrace(); throw new AppSysException("SE101007"); } attachment.setFileSize(Long.valueOf(uploadResult.get(AppFileUploadUtils.KEY_FILE_SIZE))); attachment.setUploadFilePath(uploadResult.get(AppFileUploadUtils.KEY_RELATIVE_PATH)); attachment.setUploadTime(new Date()); String webServerUrl =AppPropUtil.getPropValue(AppPropUtil.Keys.DOWNLOAD_FILE_HTTP ); String accessPath =webServerUrl+AppFileUploadUtils.genThubnFilePath(attachment.getUploadFilePath(), ImageType.MIDDLE) ; attachment.setAccessFilePath(accessPath); nhAttachmentIDao.doSave(attachment); attachment.setSortNum(sortNum); sortNum++; Map< String,Object> picRs = new HashMap< String, Object> (); picRs.put("picId", attachment.getId()); String webAccessUrl =webServerUrl+AppFileUploadUtils.genThubnFilePath(attachment.getUploadFilePath(),ImageType.SMALL); picRs.put("url", webAccessUrl); rs.add(picRs); } Page page = new Page(); page.setResult(rs); returnWsResultJson.success(page); }@Override public void saveOrUpdate(NhSalePerformancePic vo) { nhSalePerformancePicIDao.saveOrUpdateNhSalePerformancePic(vo); }@Override public NhSalePerformancePic findById(String id) { return nhSalePerformancePicIDao.findNhSalePerformancePicById(id); }@Override public void deleteById(String id) { nhSalePerformancePicIDao.deleteNhSalePerformancePicById(id); }@Override public void deleteByIds(String[] ids) { nhSalePerformancePicIDao.deleteNhSalePerformancePicByIds(ids); } @Override public List< NhSalePerformancePic> findAll() { return nhSalePerformancePicIDao.findAllNhSalePerformancePic(); }@Override public Page searchPage(int pageNo, int pageSize, String orderByStr) { return nhSalePerformancePicIDao.searchNhSalePerformancePic(pageNo, pageSize, orderByStr); }@Override public Page searchPage(int pageNo, int pageSize, String orderByStr, NhSalePerformancePic vo) { return nhSalePerformancePicIDao.searchNhSalePerformancePic(pageNo, pageSize, orderByStr, vo); }/** * @param nhSalePerformancePicIDao *the nhSalePerformancePicIDao to set */ public void setNhSalePerformancePicIDao(NhSalePerformancePicIDao nhSalePerformancePicIDao) { this.nhSalePerformancePicIDao = nhSalePerformancePicIDao; }/** * * @param nhAttachmentIDao *nhAttachmentIDao to set */ public void setNhAttachmentIDao(NhAttachmentIDao nhAttachmentIDao) { this.nhAttachmentIDao = nhAttachmentIDao; }@Override public List< NhSalePerformancePic> findAllNhSalePerformancePicByPerformacneId( String performancceId) { // TODO Auto-generated method stub return nhSalePerformancePicIDao.findAllNhSalePerformancePicByPerformacneId(performancceId); }}

 
4.AppFileUploadUtils
/** * */ package cn.maitian.newhouse.framework.core.util; import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.Calendar; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import org.apache.commons.fileupload.util.Streams; import org.apache.commons.lang.StringUtils; import cn.maitian.newhouse.framework.core.exception.AppClientException; import net.coobird.thumbnailator.Thumbnails; /** * 文件上传通用方法 * * @author MGS * @company ISOFTSTONE * @version 1.0 */ public class AppFileUploadUtils { /** * 附件上传目录 */ private static final String FILE_TYPE_UPLOAD = "/upload"; /** * 头像上传目录 */ private static final String FILE_TYPE_HEADPIC = "/headpic"; /** * 附件上传临时目录 */ private static final String FILE_TYPE_TMP = "/tmp"; /** * 文件分隔符 */ private static final String SEPARATOR = "/"; /** * 头像扩展名 */ private static final String HEAD_EXT = ".jpg"; /** * key:文件大小 */ public static final String KEY_FILE_SIZE = "fileSize"; /** * key:文件相对路径 */ public static final String KEY_RELATIVE_PATH = "relativePath"; /** * key:下载文件相对路径 */ public static final String KEY_RELATIVE_DOWNLOAD_PATH = "relativeDownloadPath"; /** * ipa文件 */ public static final String PLIST_FILE = "plist"; /** * ipa文件 */ public static final String IPA_FILE = "ipa"; /** * 图片类型 */ public enum ImageType { /** * 小图片连接名 */ SMALL("_s"), /** * 中图片连接名 */ MIDDLE("_m"), /** * 大图片连接名 */LARGE("_l"), /** * banner图片 */ BANNER("_b"); private String val; private ImageType(String val) { this.val = val; }/** * 输出值 * * @return Integer */ public String value() { return this.val; } }/** * 文件上传 * * @param inputStream *文件流 * @param fullFileName *完整文件名 * @return 相对路径 * @throws IOException *异常 */ public static String uploadHead(InputStream inputStream, String fullFileName) throws IOException { String relativePath = FILE_TYPE_HEADPIC + getFileDatePath(); if (AppStringUtils.isEmpty(relativePath)) { return null; } if (AppStringUtils.isEmpty(fullFileName)) { return null; } fullFileName = getOriginalFileName(fullFileName) + HEAD_EXT; BufferedInputStream in = null; BufferedOutputStream out = null; // 文件上传基础路径 String basePath = AppPropUtil.getPropValue(AppPropUtil.Keys.FILE_UPLOAD_HTTP); // 文件上传的相对路径 String relativeFilePath = ""; // 文件上传的完整路径 String fullFilePath = ""; // 返回上传附件信息 try { // 获得文件输入流 in = new BufferedInputStream(inputStream); // 文件的相对路径 File file = new File(basePath + relativePath); // 若文件夹不存在,则递归创建文件夹 if (!file.exists()) { file.mkdirs(); } relativeFilePath = relativePath + SEPARATOR + fullFileName; fullFilePath = basePath + relativeFilePath; // 获得文件输出流 out = new BufferedOutputStream(new FileOutputStream(new File(basePath + relativeFilePath))); // 写入文件 Streams.copy(in, out, true); } finally { try { if (out != null) { out.close(); } } finally { if (in != null) { in.close(); } } }// 生成头像小图 genSmallThumbPic(fullFilePath, genThubnFilePath(fullFilePath, ImageType.SMALL)); // 生成头像中图 genMiddleThumbPic(fullFilePath, genThubnFilePath(fullFilePath, ImageType.MIDDLE)); // 生成头像大图 genLargeThumbPic(fullFilePath, genThubnFilePath(fullFilePath, ImageType.LARGE)); return relativeFilePath; }/** * 根据类型生成缩率图路径 * * @param srcFilePath *原始文件名 * @param it *图片类型 * @return String */ public static String genThubnFilePath(String srcFilePath, ImageType it) { if (srcFilePath == null || srcFilePath.trim().length() == 0) { return null; } // . 之前的字符串 String prefix = getOriginalFileName(srcFilePath); // . 之后的字符串 String suffix = getFileExtension(srcFilePath); // 根据类型生成缩率图路径 String thubnFilePath = prefix + it.value() + "." + suffix; return thubnFilePath; }/** * 文件上传 * * @param inputStream *文件流 * @param fullFileName *完整文件名 * @return 相对路径 * @throws IOException *异常 */ public static Map< String, String> upload(InputStream inputStream, String fullFileName) throws IOException { Map< String, String> result = new HashMap< String, String> (); String fileSize = "0"; BufferedInputStream in = null; BufferedOutputStream out = null; // 文件上传路径前缀 String basePath = AppPropUtil.getPropValue(AppPropUtil.Keys.FILE_UPLOAD_HTTP); String relativePath = FILE_TYPE_UPLOAD + getFileDatePath(); // 完整文件名称 String fullFilePath = ""; // 返回上传附件信息 try { // 获得文件输入流 in = new BufferedInputStream(inputStream); // 文件的相对路径 File file = new File(basePath + relativePath); // 若文件夹不存在,则递归创建文件夹 if (!file.exists()) { file.mkdirs(); } // 文件全路径 fullFilePath = basePath + relativePath + SEPARATOR + fullFileName; File f = new File(fullFilePath); // 获得文件输出流 out = new BufferedOutputStream(new FileOutputStream(f)); // 写入文件 Streams.copy(in, out, true); fileSize = String.valueOf(f.length()); } finally { try { if (out != null) { out.close(); } } finally { if (in != null) { in.close(); } } } // 如果是图片,生成大中小图片 if (isImage(fullFileName)) { // 生成头像小图 genSmallThumbPic(fullFilePath, genThubnFilePath(fullFilePath, ImageType.SMALL)); // 生成头像中图 genMiddleThumbPic(fullFilePath, genThubnFilePath(fullFilePath, ImageType.MIDDLE)); // 生成头像大图 genLargeThumbPic(fullFilePath, genThubnFilePath(fullFilePath, ImageType.LARGE)); } // 大小 result.put(KEY_FILE_SIZE, fileSize); // 相对路径 result.put(KEY_RELATIVE_PATH, relativePath + SEPARATOR + fullFileName); return result; }/** * @param inputStream *流 * @param fullFileName *文件名 * @return Map< String, String> * @throws IOException *异常 */ public static Map< String, String> uploadTemp(InputStream inputStream, String fullFileName) throws IOException { Map< String, String> result = new HashMap< String, String> (); String fileSize = "0"; BufferedInputStream in = null; BufferedOutputStream out = null; // 文件上传路径前缀 String basePath = AppPropUtil.getPropValue(AppPropUtil.Keys.FILE_UPLOAD_HTTP); String relativePath = FILE_TYPE_TMP + getFileDatePath(); // 完整文件名称 String fullFilePath = ""; // 返回上传附件信息 try { // 获得文件输入流 in = new BufferedInputStream(inputStream); // 文件的相对路径 File file = new File(basePath + relativePath); // 若文件夹不存在,则递归创建文件夹 if (!file.exists()) { file.mkdirs(); } // 文件全路径 fullFilePath = basePath + relativePath + SEPARATOR + fullFileName; File f = new File(fullFilePath); // 获得文件输出流 out = new BufferedOutputStream(new FileOutputStream(f)); // 写入文件 Streams.copy(in, out, true); fileSize = String.valueOf(f.length()); } finally { try { if (out != null) { out.close(); } } finally { if (in != null) { in.close(); } } } // 大小 result.put(KEY_FILE_SIZE, fileSize); // 相对路径 result.put(KEY_RELATIVE_PATH, relativePath + SEPARATOR + fullFileName); return result; }/** * 安卓文件上传 * * @param inputStream *文件流 * @param fullFileName *完整文件名 * @param version *版本号 * @return 相对路径 * @throws IOException *异常 */ public static Map< String, Object> uploadandroid(InputStream inputStream, String fullFileName, String version) throws IOException { Map< String, Object> result = new HashMap< String, Object> (); int fileSize = 0; BufferedInputStream in = null; BufferedOutputStream out = null; // 文件上传路径前缀 String basePath = AppPropUtil.getPropValue(AppPropUtil.Keys.FILE_UPLOAD_HTTP); // 安卓上传路径 String androidUploadPath = AppPropUtil.getPropValue(AppPropUtil.Keys.ANDROID_UPLOAD_PREFIX); String relativePath = androidUploadPath + SEPARATOR + version; // 完整文件名称 String fullFilePath = ""; // 返回上传附件信息 try { // 获得文件输入流 in = new BufferedInputStream(inputStream); // 文件的相对路径 File file = new File(basePath + relativePath); // 若文件夹不存在,则递归创建文件夹 if (!file.exists()) { file.mkdirs(); } // 文件全路径 fullFilePath = basePath + relativePath + SEPARATOR + fullFileName; File f = new File(fullFilePath); // 获得文件输出流 out = new BufferedOutputStream(new FileOutputStream(f)); // 写入文件 Streams.copy(in, out, true); fileSize = (int) f.length(); } finally { try { if (out != null) { out.close(); } } finally { if (in != null) { in.close(); } } } // 大小 result.put(KEY_FILE_SIZE, fileSize); // 相对路径 result.put(KEY_RELATIVE_PATH, relativePath + SEPARATOR + fullFileName); return result; }/** * 把文件写到固定目标文件夹下,返回目标文件路径 * * @param is *流 * @param fullFileName *文件名 * @param version *版本 * * * @return Map< String, Object> * @throws IOException *异常 */ public static Map< String, Object> uploadios(InputStream is, String fullFileName, String version) throws IOException { // 目标文件路径 String targetPath = ""; BufferedInputStream in = null; BufferedOutputStream out = null; // 文件上传路径前缀 String basePath = AppPropUtil.getPropValue(AppPropUtil.Keys.FILE_UPLOAD_HTTP); // ios上传路径 String isoUpload = AppPropUtil.getPropValue(AppPropUtil.Keys.IOS_UPLOAD_PREFIX); String relativePath = isoUpload + SEPARATOR + version; try { // 获得文件输入流 in = new BufferedInputStream(is); // 文件的相对路径 File file = new File(basePath + relativePath); // 若文件夹不存在,则递归创建文件夹 if (!file.exists()) { file.mkdirs(); } // 文件全路径 targetPath = basePath + relativePath + SEPARATOR + fullFileName; File f = new File(targetPath); // 获得文件输出流 out = new BufferedOutputStream(new FileOutputStream(f)); // 写入文件 Streams.copy(in, out, true); } finally { try { if (out != null) { out.close(); } } finally { if (in != null) { in.close(); } } } String basePathHttps = AppPropUtil.getPropValue(AppPropUtil.Keys.FILE_UPLOAD_HTTPS); return unzip(targetPath, basePathHttps + relativePath, false); }/** * 解压缩zip包 * * @param zipFilePath *zip文件的全路径 * @param unzipFilePath *解压后的文件保存的路径 * @param includeZipFileName *解压后的文件保存的路径是否包含压缩文件的文件名。true-包含;false-不包含 * @return Map< String, Object> * @throws IOException *异常 * @throws ZipException *异常 */ @SuppressWarnings("resource") public static Map< String, Object> unzip(String zipFilePath, String unzipFilePath, boolean includeZipFileName) throws ZipException, IOException { Map< String, Object> map = new HashMap< String, Object> (); if (AppStringUtils.isEmpty(zipFilePath) || AppStringUtils.isEmpty(unzipFilePath)) { return map; } File zipFile = new File(zipFilePath); // 如果解压后的文件保存路径包含压缩文件的文件名,则追加该文件名到解压路径 if (includeZipFileName) { String fileName = zipFile.getName(); if (AppStringUtils.isNotEmpty(fileName)) { fileName = fileName.substring(0, fileName.lastIndexOf(".")); } unzipFilePath = unzipFilePath + File.separator + fileName; } // 创建解压缩文件保存的路径 File unzipFileDir = new File(unzipFilePath); if (!unzipFileDir.exists() || !unzipFileDir.isDirectory()) { unzipFileDir.mkdirs(); }// 开始解压 ZipEntry entry = null; String entryFilePath = null, entryDirPath = null; File entryFile = null, entryDir = null; int index = 0, count = 0, bufferSize = 1024; byte[] buffer = new byte[bufferSize]; BufferedInputStream bis = null; BufferedOutputStream bos = null; ZipFile tempZip = new ZipFile(zipFile); @SuppressWarnings("unchecked") Enumeration< ZipEntry> entries = (Enumeration< ZipEntry> ) tempZip.entries(); boolean isNoHasIpa = true; boolean isNoHasPlist = true; // 循环对压缩包里的每一个文件进行解压 while (entries.hasMoreElements()) { entry = entries.nextElement(); String fileName = entry.getName(); // 构建压缩包中一个文件解压后保存的文件全路径 entryFilePath = unzipFilePath + SEPARATOR + fileName; // 构建解压后保存的文件夹路径 index = entryFilePath.lastIndexOf(SEPARATOR); if (index != -1) { entryDirPath = entryFilePath.substring(0, index); } else { entryDirPath = ""; } entryDir = new File(entryDirPath); // 如果文件夹路径不存在,则创建文件夹 if (!entryDir.exists() || !entryDir.isDirectory()) { entryDir.mkdirs(); }// 创建解压文件 entryFile = new File(entryFilePath); // if (entryFile.exists()) { // 检测文件是否允许删除,如果不允许删除,将会抛出SecurityException // SecurityManager securityManager = new SecurityManager(); // securityManager.checkDelete(entryFilePath); // 删除已存在的目标文件 // entryFile.delete(); // }// 写入文件 bos = new BufferedOutputStream(new FileOutputStream(entryFile)); bis = new BufferedInputStream(tempZip.getInputStream(entry)); while ((count = bis.read(buffer, 0, bufferSize)) != -1) { bos.write(buffer, 0, count); } bos.flush(); bos.close(); // 获取文件后缀名 String suffix = fileName.substring(fileName.lastIndexOf(".") + 1); if (IPA_FILE.equalsIgnoreCase(suffix)) { isNoHasIpa = false; } // plist文件 if (PLIST_FILE.equalsIgnoreCase(suffix)) { isNoHasPlist = false; // 大小 map.put(KEY_FILE_SIZE, (int) zipFile.length()); String basePath = AppPropUtil.getPropValue(AppPropUtil.Keys.FILE_UPLOAD_HTTPS); entryFilePath = entryFilePath.replace(basePath, ""); // plist相对路径 map.put(KEY_RELATIVE_PATH, entryFilePath); } } if (isNoHasIpa || isNoHasPlist) { throw new AppClientException("CE104008"); } String bph = AppPropUtil.getPropValue(AppPropUtil.Keys.FILE_UPLOAD_HTTP); map.put(KEY_RELATIVE_DOWNLOAD_PATH, zipFilePath.replace(bph, "")); return map; }/** * @param targetPath *文件的相对路径 */ public static void deleteOriginalFile(String targetPath) { // 文件的相对路径 File file = new File(targetPath); // 若文件存在,则删除文件 if (file.exists()) { file.delete(); } }/** * 获取文件的名称(不包括后缀) * * @param fileName *文件全名称 * @return 文件名(不含后缀) */ public static String getOriginalFileName(String fileName) { // 文件名中不包括 . 则认为文件非法 if (!fileName.contains(".")) { return ""; } // 截取文件后缀 return fileName.substring(0, fileName.lastIndexOf(".")); }/** * 获取文件名称后缀 * * @param fileName *文件全名称 * @return 文件后缀 */ public static String getFileExtension(String fileName) { // 文件名中不包括 . 则认为文件非法 if (!fileName.contains(".")) { return ""; } // 截取文件后缀 return fileName.substring(fileName.lastIndexOf(".") + 1); }/** * 根据用户ID生成用户头像地址 * * @param userId *用户ID * @return 头像地址 */ public static String getHeadFilePathByUserId(String userId) { if (AppStringUtils.isEmpty(userId)) { return ""; } String substrValue = https://www.songbingjia.com/android/userId.substring(userId.length() - 2); int value = hexadecimalConvertDecimalism(substrValue); int cal = value % 50; return SEPARATOR + String.valueOf(cal); }/** * 十六进制转换成十进制 * * @param hexadecimal *十六进制参数值 * @return 十进制值 */ public static int hexadecimalConvertDecimalism(String hexadecimal) { // 十六进制转化为十进制 return Integer.parseInt(hexadecimal, 16); }/** * 按 /年/月日/小时 创建附件上传路径 * * @return 附件上传路径 */ public static String getFileDatePath() { Calendar calendar = Calendar.getInstance(); int yearInt = calendar.get(Calendar.YEAR); int monthInt = calendar.get(Calendar.MONTH) + 1; int dayInt = calendar.get(Calendar.DAY_OF_MONTH); int hourInt = calendar.get(Calendar.HOUR_OF_DAY); String monthStr = monthInt > = 10 ? String.valueOf(monthInt) :"0" + monthInt; String dayStr = dayInt > = 10 ? String.valueOf(dayInt) : "0" + dayInt; String hourStr = hourInt > = 10 ? String.valueOf(hourInt) : "0" + hourInt; // 按 /年/月日/小时 创建附件上传路径 return SEPARATOR + yearInt + SEPARATOR + monthStr + dayStr + SEPARATOR + hourStr; }/** * 获取相应的地址 * * @return 附件上传路径 */ public static String getFilePath() { Calendar calendar = Calendar.getInstance(); int yearInt = calendar.get(Calendar.YEAR); int monthInt = calendar.get(Calendar.MONTH) + 1; int dayInt = calendar.get(Calendar.DAY_OF_MONTH); int hourInt = calendar.get(Calendar.HOUR_OF_DAY); String monthStr = monthInt > = 10 ? String.valueOf(monthInt) : "0" + monthInt; String dayStr = dayInt > = 10 ? String.valueOf(dayInt) : "0" + dayInt; String hourStr = hourInt > = 10 ? String.valueOf(hourInt) : "0" + hourInt; // 按 /年/月日/小时 创建附件上传路径 return SEPARATOR + yearInt + SEPARATOR + monthStr + dayStr + SEPARATOR + hourStr; }/** * 从网络URL中下载文件 * * @param urlStr *图片网络路径 * @param fileName *图片存储名称 * @param savePath *图片保存路径 * @throws IOException *异常 */ public static void downLoadFromUrl(String urlStr, String fileName, String savePath) throws IOException { URL url; // 得到输入流 InputStream inputStream = null; FileOutputStream fos = null; try { url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设置超时间为3秒 conn.setConnectTimeout(3 * 1000); // 防止屏蔽程序抓取而返回403错误 conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); inputStream = conn.getInputStream(); // 获取自己数组 byte[] getData = https://www.songbingjia.com/android/readInputStream(inputStream); // 文件保存位置 File saveDir = new File(savePath); if (!saveDir.exists()) { saveDir.mkdir(); } File file = new File(saveDir + File.separator + fileName); fos = new FileOutputStream(file); fos.write(getData); } finally { if (fos != null) { fos.close(); } if (inputStream != null) { inputStream.close(); } } }/** * 从输入流中获取字节数组 * * @param inputStream *流 * @return byte数组 * @throws IOException *异常 */ public static byte[] readInputStream(InputStream inputStream) throws IOException { ByteArrayOutputStream bos = null; try { byte[] buffer = new byte[1024]; int len = 0; bos = new ByteArrayOutputStream(); while ((len = inputStream.read(buffer)) != -1) { bos.write(buffer, 0, len); }return bos.toByteArray(); } finally { if (bos != null) { bos.close(); } } }/** * 生成小缩率图 * * @param srcFilePath *原图路径 * @param thumbFilePath *缩率图路径 * @throws IOException */ private static void genSmallThumbPic(String srcFilePath, String thumbFilePath) throws IOException { int width = AppPropPublicUtil.getIntegerValue(AppPropPublicUtil.Keys.APP_IMAGE_S_W); int height = AppPropPublicUtil.getIntegerValue(AppPropPublicUtil.Keys.APP_IMAGE_S_H); genThumbPic(srcFilePath, thumbFilePath, width, height); }/** * 生成中缩率图 * * @param srcFilePath *原图路径 * @param thumbFilePath *缩率图路径 * @throws IOException */ private static void genMiddleThumbPic(String srcFilePath, String thumbFilePath) throws IOException { int width = AppPropPublicUtil.getIntegerValue(AppPropPublicUtil.Keys.APP_IMAGE_M_W); int height = AppPropPublicUtil.getIntegerValue(AppPropPublicUtil.Keys.APP_IMAGE_M_H); genThumbPic(srcFilePath, thumbFilePath, width, height); }/** * 生成大缩率图 * * @param srcFilePath *原图路径 * @param thumbFilePath *缩率图路径 * @throws IOException */ private static void genLargeThumbPic(String srcFilePath, String thumbFilePath) throws IOException { int width = AppPropPublicUtil.getIntegerValue(AppPropPublicUtil.Keys.APP_IMAGE_L_W); int height = AppPropPublicUtil.getIntegerValue(AppPropPublicUtil.Keys.APP_IMAGE_L_H); genThumbPic(srcFilePath, thumbFilePath, width, height); }/** * 生成缩率图 * * @param filePath *原图路径 * @param pathSuffix *文件名后缀 * @throws IOException */ private static void genThumbPic(String srcFilePath, String thumbFilePath, int width, int height) throws IOException { if (srcFilePath == null || srcFilePath.trim().length() == 0) { return; } if (thumbFilePath == null || thumbFilePath.trim().length() == 0) { return; } // 按指定大小把图片进行缩和放(会遵循原图高宽比例) Thumbnails.of(new File(srcFilePath)).size(width, height).toFile(new File(thumbFilePath)); }/** * 判断文件是否是图片 * * @param fullFilePath *完整的文件路径 * @return String */ private static boolean isImage(String fileName) { // 获取配置中支持的扩展名 String supportImageExts = AppPropPublicUtil.getPropValue(AppPropPublicUtil.Keys.APP_SUPPORT_IMAGE_EXT); if (supportImageExts == null || supportImageExts.trim().length() == 0) { return false; } // 获取配置中支持的扩展名 String fileExt = getFileExtension(fileName); if (fileExt == null || fileExt.trim().length() == 0) { return false; } return supportImageExts.toLowerCase().contains(fileExt.toLowerCase() + SEPARATOR); }/** * 测试获取网络图片到本地 * * @param args *参数 * */ public static void main(String[] args) { String path ="C:/Users/Administrator/Pictures/ab111.jpg"; System.out.println(isImage(path)); }/** * 保存户型图 * @param ins输入流 * @param fullFileName全路径 * @param waterMakerPath水印路径 * @return相对路径 * @exception IOException 路径错误 */ public static Map< String, String> uploadHousePic(InputStream ins, String fullFileName, String waterMakerPath) throws IOException { if(StringUtils.isBlank(waterMakerPath)){ throw new IOException("户型图水印文件路径未配置,key为"+AppPropPublicUtil.Keys.APP_HOUSE_WATERMARKER); } Map< String, String> result = new HashMap< String, String> (); String fileSize = "0"; BufferedInputStream in = null; BufferedOutputStream out = null; // 文件上传路径前缀 String basePath = AppPropUtil.getPropValue(AppPropUtil.Keys.FILE_UPLOAD_HTTP); String relativePath = FILE_TYPE_UPLOAD + getFileDatePath(); // 完整文件名称 String fullFilePath = ""; // 返回上传附件信息 try { // 获得文件输入流 in = new BufferedInputStream(ins); // 文件的相对路径 File file = new File(basePath + relativePath); // 若文件夹不存在,则递归创建文件夹 if (!file.exists()) { file.mkdirs(); } // 文件全路径 fullFilePath = basePath + relativePath + SEPARATOR + fullFileName; File f = new File(fullFilePath); // 获得文件输出流 out = new BufferedOutputStream(new FileOutputStream(f)); // 写入文件 Streams.copy(in, out, true); fileSize = String.valueOf(f.length()); } finally { try { if (out != null) { out.close(); } } finally { if (in != null) { in.close(); } } } // 如果是图片,生成大中小图片 if (isImage(fullFileName)) {waterMarkHousePic(fullFilePath,null,waterMakerPath); // 生成头像小图 genSmallThumbPic(fullFilePath, genThubnFilePath(fullFilePath, ImageType.SMALL)); // 生成头像中图 genMiddleThumbPic(fullFilePath, genThubnFilePath(fullFilePath, ImageType.MIDDLE)); waterMarkHousePic(genThubnFilePath(fullFilePath, ImageType.MIDDLE), genThubnFilePath(fullFilePath, ImageType.MIDDLE), waterMakerPath); // 生成头像大图 genLargeThumbPic(fullFilePath, genThubnFilePath(fullFilePath, ImageType.LARGE)); waterMarkHousePic(genThubnFilePath(fullFilePath, ImageType.LARGE), genThubnFilePath(fullFilePath, ImageType.LARGE), waterMakerPath); } // 大小 result.put(KEY_FILE_SIZE, fileSize); // 相对路径 result.put(KEY_RELATIVE_PATH, relativePath + SEPARATOR + fullFileName); return result; }/** * 给户型图原图打水印 * @param fullFilePath 路径名 * @param waterMakerPath水印路径印 * @return打水印后的大图的路径 */ private static String waterMarkHousePic(String fullFilePath,String targetPath, String waterMakerPath) throws IOException { OutputStream os = null; try { File sourceFile = new File(fullFilePath); Image srcImg = ImageIO.read(sourceFile); BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null), srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB); // 得到画笔对象 Graphics2D g = buffImg.createGraphics(); // 设置对线段的锯齿状边缘处理 g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg .getHeight(null), Image.SCALE_SMOOTH), 0, 0, null); // 水印图象的路径 水印一般为gif或者png的,这样可设置透明度e ImageIcon imgIcon = new ImageIcon(waterMakerPath); // 得到Image对象。 Image img = imgIcon.getImage(); float alpha =1f; // 透明度 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // 表示水印图片的位置 g.drawImage(img, 0, 0, null); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); g.dispose(); if(StringUtils.isBlank(targetPath)){ targetPath =fullFilePath.substring(0, fullFilePath.lastIndexOf("."))+"_b"+fullFilePath.substring(fullFilePath.lastIndexOf(".")) ; }os = new FileOutputStream(targetPath); // 生成图片 ImageIO.write(buffImg, "JPG", os); }finally { try { if (null != os) os.close(); } catch (Exception e) { e.printStackTrace(); } } return targetPath; }/** * * @param ins 输入流 * @param fullFileName文件名 * @param waterMakerPath水印路径 * @return信息 * @exceptionIOException路径没找到 */ public static Map< String, String> uploadPicWithWaterMarker(InputStream ins, String fullFileName, String waterMakerPath) throws IOException { if(StringUtils.isBlank(waterMakerPath)){ throw new IOException("一般图水印文件路径未配置,key为"+AppPropPublicUtil.Keys.APP_WATERMARKER); } Map< String, String> result = new HashMap< String, String> (); String fileSize = "0"; BufferedInputStream in = null; BufferedOutputStream out = null; // 文件上传路径前缀 String basePath = AppPropUtil.getPropValue(AppPropUtil.Keys.FILE_UPLOAD_HTTP); String relativePath = FILE_TYPE_UPLOAD + getFileDatePath(); // 完整文件名称 String fullFilePath = ""; // 返回上传附件信息 try { // 获得文件输入流 in = new BufferedInputStream(ins); // 文件的相对路径 File file = new File(basePath + relativePath); // 若文件夹不存在,则递归创建文件夹 if (!file.exists()) { file.mkdirs(); } // 文件全路径 fullFilePath = basePath + relativePath + SEPARATOR + fullFileName; File f = new File(fullFilePath); // 获得文件输出流 out = new BufferedOutputStream(new FileOutputStream(f)); // 写入文件 Streams.copy(in, out, true); fileSize = String.valueOf(f.length()); } finally { try { if (out != null) { out.close(); } } finally { if (in != null) { in.close(); } } } // 如果是图片,生成大中小图片 if (isImage(fullFileName)) {waterMarkPic(fullFilePath,null,waterMakerPath); // 生成头像小图 genSmallThumbPic(fullFilePath, genThubnFilePath(fullFilePath, ImageType.SMALL)); // 生成头像中图 genMiddleThumbPic(fullFilePath, genThubnFilePath(fullFilePath, ImageType.MIDDLE)); waterMarkPic(genThubnFilePath(fullFilePath, ImageType.MIDDLE), genThubnFilePath(fullFilePath, ImageType.MIDDLE), waterMakerPath); // 生成头像大图 genLargeThumbPic(fullFilePath, genThubnFilePath(fullFilePath, ImageType.LARGE)); waterMarkPic(genThubnFilePath(fullFilePath, ImageType.LARGE), genThubnFilePath(fullFilePath, ImageType.LARGE), waterMakerPath); } // 大小 result.put(KEY_FILE_SIZE, fileSize); // 相对路径 result.put(KEY_RELATIVE_PATH, relativePath + SEPARATOR + fullFileName); return result; }private static String waterMarkPic(String fullFilePath,String targetPath ,String waterMakerPath) throws IOException { OutputStream os = null; try { Image srcImg = ImageIO.read(new File(fullFilePath)); BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null), srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB); // 得到画笔对象 Graphics2D g = buffImg.createGraphics(); // 设置对线段的锯齿状边缘处理 g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg .getHeight(null), Image.SCALE_SMOOTH), 0, 0, null); // 水印图象的路径 水印一般为gif或者png的,这样可设置透明度e ImageIcon imgIcon = new ImageIcon(waterMakerPath); // 得到Image对象。 Image img = imgIcon.getImage(); float alpha =1f; // 透明度 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // 表示水印图片的位置 g.drawImage(img, (buffImg.getWidth()-img.getWidth(null))/2, (buffImg.getHeight()-img.getHeight(null))/2, null); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); g.dispose(); if(StringUtils.isBlank(targetPath)){ targetPath =fullFilePath.substring(0, fullFilePath.lastIndexOf("."))+"_b"+fullFilePath.substring(fullFilePath.lastIndexOf(".")) ; }os = new FileOutputStream(targetPath); // 生成图片 ImageIO.write(buffImg, "JPG", os); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != os) os.close(); } catch (Exception e) { e.printStackTrace(); } } return targetPath; }/** * @param inputStream 输入流 * @param fullFileName文件名 * @return信息 * @exceptionIOException路径没找到 */ public static Map< String, String> bannerUpload(InputStream inputStream, String fullFileName) throws IOException { Map< String, String> result = new HashMap< String, String> (); String fileSize = "0"; BufferedInputStream in = null; BufferedOutputStream out = null; // 文件上传路径前缀 String basePath = AppPropUtil.getPropValue(AppPropUtil.Keys.FILE_UPLOAD_HTTP); String relativePath = FILE_TYPE_UPLOAD + getFileDatePath(); // 完整文件名称 String fullFilePath = ""; // 返回上传附件信息 try { // 获得文件输入流 in = new BufferedInputStream(inputStream); // 文件的相对路径 File file = new File(basePath + relativePath); // 若文件夹不存在,则递归创建文件夹 if (!file.exists()) { file.mkdirs(); } // 文件全路径 fullFilePath = basePath + relativePath + SEPARATOR + fullFileName; File f = new File(fullFilePath); // 获得文件输出流 out = new BufferedOutputStream(new FileOutputStream(f)); // 写入文件 Streams.copy(in, out, true); fileSize = String.valueOf(f.length()); } finally { try { if (out != null) { out.close(); } } finally { if (in != null) { in.close(); } } } // 如果是图片,生成大中小图片 if (isImage(fullFileName)) { int width = AppPropPublicUtil.getIntegerValue(AppPropPublicUtil.Keys.BANNER_IMAGE_W); int height = AppPropPublicUtil.getIntegerValue(AppPropPublicUtil.Keys.BANNER_IMAGE_H); // 生成banner图 genThumbPic(fullFilePath, genThubnFilePath(fullFilePath, ImageType.BANNER), width, height); } // 大小 result.put(KEY_FILE_SIZE, fileSize); // 相对路径 result.put(KEY_RELATIVE_PATH, relativePath + SEPARATOR + fullFileName); return result; }}

 
5.app-config-dev.properties
#u670du52a1u5668u8defu5f84 APP_SERVER_PATH=http://172.16.5.66:8080/newhouse#u8c03u5ea6u670du52a1u5668u8defu5f84 SCHEDULE_SERVER_PATH=http://172.16.5.66:8080/newhouse#u641cu7d22u5f15u64ceu5730u5740 SEARCH_ES_SERVER=http://172.16.5.153:8083/EsQuery/query/ #SEARCH_ES_SERVER=http://127.0.0.1:8071/EsQuery/query/ SEARCH_ES_ClUSTER_NAME=maimai-es-test#u6587u4ef6u4e0au4f20u8defu5f84u524du7f00 FILE_UPLOAD_HTTP=/diskfile/system/httpsurl FILE_UPLOAD_HTTPS=/diskfile/system/httpsurl ANDROID_UPLOAD_PREFIX=/mobile/android IOS_UPLOAD_PREFIX=/mobile/ios#u8bfbu53d6u6587u4ef6u8defu5f84u524du7f00 DOWNLOAD_FILE_HTTP=http://192.168.183.47:8090/pic DOWNLOAD_FILE_HTTPS=http://192.168.183.47:8090/pic ANDROID_DEFAULT_INSTALL=https://mmdev1.maitian.cn/newhouse_100/default/newhouse.apk IOS_DEFAULT_INSTALL=https://mmdev1.maitian.cn/newhouse_100/default/newhouse.plist#u77edu4fe1u76f8u5173 SMS_URL=http://172.16.5.31:8000/api/sms SMS_APPID=aadc9abe17f54007b5cca7a2513cb8b1

【基于cxf的app文件上传接口(带回显功能)】 

    推荐阅读