diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java index 2935d198f..8cb4a06d7 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java @@ -23,6 +23,8 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; + public static String YYYYMMDDHHMMSSSSS = "yyyyMMddHHmmssSSS"; + public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; private static String[] parsePatterns = { @@ -55,6 +57,11 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils return dateTimeNow(HH_MM_SS); } + public static String getMillisecond() + { + return dateTimeNow(YYYYMMDDHHMMSSSSS); + } + public static final String getTime() { return dateTimeNow(YYYY_MM_DD_HH_MM_SS); diff --git a/ruoyi-content/src/main/java/com/ruoyi/content/constants/PropertiesConstants.java b/ruoyi-content/src/main/java/com/ruoyi/content/constants/PropertiesConstants.java new file mode 100644 index 000000000..6de0cbd01 --- /dev/null +++ b/ruoyi-content/src/main/java/com/ruoyi/content/constants/PropertiesConstants.java @@ -0,0 +1,40 @@ +package com.ruoyi.content.constants; + +/** + * 配置文件常量 + * + * @author admin + */ +public class PropertiesConstants { + + public static final String TEMPLATE_VIEW_PATH = "/WEB-INF/static/template/view.flt"; + public static final String TEMPLATE_EDIT_PATH = "/WEB-INF/static/template/edit.flt"; + + public static final String FILE_PATH = "/app/contentMKTCms/webapp/WEB-INF/static/"; + public static final String PROJECT_LOCALPATH = "/app/contentMKTCms/webapp"; + public static final String ONLINE_IMG_PATH = "network/article/"; + public static final String OSS_URL = "http://cdn.sinosoftec.com/"; + public static final String OSS_URL_HTTPS = "https://cdn.sinosoftec.com/"; + public static final String OSSENDPOINT = "oss-cn-qingdao.aliyuncs.com"; + public static final String OSSID = "LTAI4GFWLJ2Wtbyj1x5wDoA4"; + public static final String OSSKEY = "7n4eLwnFaHAh40hPMOfNpK4yYNvmLG"; + public static final String BUCKETNAME = "sinosoftec"; + public static final String OSSPATH = "mkt/YXPT/"; + + public static final String IS_NULL2 = "\"\""; + public static final String CURRENT_USER = "user"; + public static final String I_SUCC = "succ"; + public static final String GALLERY_IMG_PATH = "gallery/img/"; + public static final String GALLERY_MINIMG_PATH = "gallery/min-img/"; + public static final String REDIRECT_ARTICLE_VIEW = "http://uat-mktasst.ihxlife.com/api/v1.0/articleView?"; + public static final String GVQYH_ARTICLE_WRITE = "http://qyhgateway.ihxlife.com/api/v2/article/write?redirectUrl="; + public static final String GVQYH_INDEX = "http://qyhgateway.ihxlife.com/api/v1/oauth2/index?state="; + public static final String AD_IMG_PATH = "ad/"; + + //信鸽系统相关配置 + public static final String NOTIFY_UID = "pyqzs"; + public static final String NOTIFY_KEY = "a12dadf_12asdinktn0091d1fzxpyqzs1da249kk"; + public static final String NOTIFY_URL = "http://uat-notify.ihxlife.com/notify/api/v1/qyh/img/send"; + public static final String NOTIFY_AGENTID = "1000024"; + +} diff --git a/ruoyi-content/src/main/java/com/ruoyi/content/controller/AdvertisementController.java b/ruoyi-content/src/main/java/com/ruoyi/content/controller/AdvertisementController.java index be716afd1..05b0d61e8 100644 --- a/ruoyi-content/src/main/java/com/ruoyi/content/controller/AdvertisementController.java +++ b/ruoyi-content/src/main/java/com/ruoyi/content/controller/AdvertisementController.java @@ -6,11 +6,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.content.domain.CmsArticleAdInfo; @@ -19,6 +15,7 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; /** * 文章广告Controller @@ -35,7 +32,6 @@ public class AdvertisementController extends BaseController { @Autowired private ICmsArticleAdInfoService cmsArticleAdInfoService; - @RequiresPermissions("content:adverts:view") @GetMapping() public String adverts() { return prefix + "/adverts"; @@ -78,8 +74,9 @@ public class AdvertisementController extends BaseController { @Log(title = "文章广告", businessType = BusinessType.INSERT) @PostMapping("/add") @ResponseBody - public AjaxResult addSave(CmsArticleAdInfo cmsArticleAdInfo) { - return toAjax(cmsArticleAdInfoService.insertCmsArticleAdInfo(cmsArticleAdInfo)); + public AjaxResult addSave(@RequestParam("addImg") MultipartFile[] files, CmsArticleAdInfo cmsArticleAdInfo) { + MultipartFile file = files[0]; + return toAjax(cmsArticleAdInfoService.insertCmsArticleAdInfo(file, cmsArticleAdInfo)); } /** diff --git a/ruoyi-content/src/main/java/com/ruoyi/content/domain/CmsArticleAdInfo.java b/ruoyi-content/src/main/java/com/ruoyi/content/domain/CmsArticleAdInfo.java index b34d2a7b2..cf1ad9be8 100644 --- a/ruoyi-content/src/main/java/com/ruoyi/content/domain/CmsArticleAdInfo.java +++ b/ruoyi-content/src/main/java/com/ruoyi/content/domain/CmsArticleAdInfo.java @@ -7,229 +7,271 @@ import com.ruoyi.common.core.domain.BaseEntity; /** * 文章广告对象 cms_article_ad_info - * + * * @author ruoyi * @date 2021-03-23 */ -public class CmsArticleAdInfo extends BaseEntity -{ +public class CmsArticleAdInfo { + private static final long serialVersionUID = 1L; - /** */ + /** + * + */ private Long adId; - /** 公司id */ + /** + * 公司id + */ @Excel(name = "公司id") private String companyId; - /** 广告类型 */ + /** + * 广告类型 + */ @Excel(name = "广告类型") private String adType; - /** 广告类型名 */ + /** + * 广告类型名 + */ @Excel(name = "广告类型名") private String adTypeName; - /** 广告跳转地址 */ + /** + * 广告跳转地址 + */ @Excel(name = "广告跳转地址") private String adLinkUrl; - /** 广告标题 */ + /** + * 广告标题 + */ @Excel(name = "广告标题") private String adTitle; - /** 广告名称 */ + /** + * 广告名称 + */ @Excel(name = "广告名称") private String adName; - /** 广告简介 */ + /** + * 广告简介 + */ @Excel(name = "广告简介") private String adSummary; - /** 广告背景颜色 */ + /** + * 广告背景颜色 + */ @Excel(name = "广告背景颜色") private String adColorType; - /** 广告图片地址 */ + /** + * 广告图片地址 + */ @Excel(name = "广告图片地址") private String adImageUrl; - /** 广告状态 0:展示 1:不可用 */ + /** + * 广告状态 0:展示 1:不可用 + */ @Excel(name = "广告状态 0:展示 1:不可用") private String adState; - /** */ + /** + * + */ @Excel(name = "") private String createDate; - /** 广告创建者 */ + /** + * + */ + @Excel(name = "") + private String createTime; + + /** + * 广告创建者 + */ @Excel(name = "广告创建者") private String createUser; - /** */ + /** + * + */ @Excel(name = "") private String updateUser; - /** */ + /** + * + */ @Excel(name = "") private String updateDate; - public void setAdId(Long adId) - { + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + /** + * + */ + @Excel(name = "") + private String updateTime; + + public void setAdId(Long adId) { this.adId = adId; } - public Long getAdId() - { + public Long getAdId() { return adId; } - public void setCompanyId(String companyId) - { + + public void setCompanyId(String companyId) { this.companyId = companyId; } - public String getCompanyId() - { + public String getCompanyId() { return companyId; } - public void setAdType(String adType) - { + + public void setAdType(String adType) { this.adType = adType; } - public String getAdType() - { + public String getAdType() { return adType; } - public void setAdTypeName(String adTypeName) - { + + public void setAdTypeName(String adTypeName) { this.adTypeName = adTypeName; } - public String getAdTypeName() - { + public String getAdTypeName() { return adTypeName; } - public void setAdLinkUrl(String adLinkUrl) - { + + public void setAdLinkUrl(String adLinkUrl) { this.adLinkUrl = adLinkUrl; } - public String getAdLinkUrl() - { + public String getAdLinkUrl() { return adLinkUrl; } - public void setAdTitle(String adTitle) - { + + public void setAdTitle(String adTitle) { this.adTitle = adTitle; } - public String getAdTitle() - { + public String getAdTitle() { return adTitle; } - public void setAdName(String adName) - { + + public void setAdName(String adName) { this.adName = adName; } - public String getAdName() - { + public String getAdName() { return adName; } - public void setAdSummary(String adSummary) - { + + public void setAdSummary(String adSummary) { this.adSummary = adSummary; } - public String getAdSummary() - { + public String getAdSummary() { return adSummary; } - public void setAdColorType(String adColorType) - { + + public void setAdColorType(String adColorType) { this.adColorType = adColorType; } - public String getAdColorType() - { + public String getAdColorType() { return adColorType; } - public void setAdImageUrl(String adImageUrl) - { + + public void setAdImageUrl(String adImageUrl) { this.adImageUrl = adImageUrl; } - public String getAdImageUrl() - { + public String getAdImageUrl() { return adImageUrl; } - public void setAdState(String adState) - { + + public void setAdState(String adState) { this.adState = adState; } - public String getAdState() - { + public String getAdState() { return adState; } - public void setCreateDate(String createDate) - { + + public void setCreateDate(String createDate) { this.createDate = createDate; } - public String getCreateDate() - { + public String getCreateDate() { return createDate; } - public void setCreateUser(String createUser) - { + + public void setCreateUser(String createUser) { this.createUser = createUser; } - public String getCreateUser() - { + public String getCreateUser() { return createUser; } - public void setUpdateUser(String updateUser) - { + + public void setUpdateUser(String updateUser) { this.updateUser = updateUser; } - public String getUpdateUser() - { + public String getUpdateUser() { return updateUser; } - public void setUpdateDate(String updateDate) - { + + public void setUpdateDate(String updateDate) { this.updateDate = updateDate; } - public String getUpdateDate() - { + public String getUpdateDate() { return updateDate; } @Override public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("adId", getAdId()) - .append("companyId", getCompanyId()) - .append("adType", getAdType()) - .append("adTypeName", getAdTypeName()) - .append("adLinkUrl", getAdLinkUrl()) - .append("adTitle", getAdTitle()) - .append("adName", getAdName()) - .append("adSummary", getAdSummary()) - .append("adColorType", getAdColorType()) - .append("adImageUrl", getAdImageUrl()) - .append("adState", getAdState()) - .append("createDate", getCreateDate()) - .append("createTime", getCreateTime()) - .append("createUser", getCreateUser()) - .append("updateUser", getUpdateUser()) - .append("updateDate", getUpdateDate()) - .append("updateTime", getUpdateTime()) - .toString(); + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("adId", getAdId()) + .append("companyId", getCompanyId()) + .append("adType", getAdType()) + .append("adTypeName", getAdTypeName()) + .append("adLinkUrl", getAdLinkUrl()) + .append("adTitle", getAdTitle()) + .append("adName", getAdName()) + .append("adSummary", getAdSummary()) + .append("adColorType", getAdColorType()) + .append("adImageUrl", getAdImageUrl()) + .append("adState", getAdState()) + .append("createDate", getCreateDate()) + .append("createTime", getCreateTime()) + .append("createUser", getCreateUser()) + .append("updateUser", getUpdateUser()) + .append("updateDate", getUpdateDate()) + .append("updateTime", getUpdateTime()) + .toString(); } } diff --git a/ruoyi-content/src/main/java/com/ruoyi/content/service/ICmsArticleAdInfoService.java b/ruoyi-content/src/main/java/com/ruoyi/content/service/ICmsArticleAdInfoService.java index b241ed85b..3ec547fc5 100644 --- a/ruoyi-content/src/main/java/com/ruoyi/content/service/ICmsArticleAdInfoService.java +++ b/ruoyi-content/src/main/java/com/ruoyi/content/service/ICmsArticleAdInfoService.java @@ -1,19 +1,20 @@ package com.ruoyi.content.service; import java.util.List; + import com.ruoyi.content.domain.CmsArticleAdInfo; +import org.springframework.web.multipart.MultipartFile; /** * 文章广告Service接口 - * + * * @author ruoyi * @date 2021-03-23 */ -public interface ICmsArticleAdInfoService -{ +public interface ICmsArticleAdInfoService { /** * 查询文章广告 - * + * * @param adId 文章广告ID * @return 文章广告 */ @@ -21,7 +22,7 @@ public interface ICmsArticleAdInfoService /** * 查询文章广告列表 - * + * * @param cmsArticleAdInfo 文章广告 * @return 文章广告集合 */ @@ -29,15 +30,16 @@ public interface ICmsArticleAdInfoService /** * 新增文章广告 - * + * + * @param file 广告图片 * @param cmsArticleAdInfo 文章广告 - * @return 结果 + * @return */ - public int insertCmsArticleAdInfo(CmsArticleAdInfo cmsArticleAdInfo); + public int insertCmsArticleAdInfo(MultipartFile file, CmsArticleAdInfo cmsArticleAdInfo); /** * 修改文章广告 - * + * * @param cmsArticleAdInfo 文章广告 * @return 结果 */ @@ -45,7 +47,7 @@ public interface ICmsArticleAdInfoService /** * 批量删除文章广告 - * + * * @param ids 需要删除的数据ID * @return 结果 */ @@ -53,7 +55,7 @@ public interface ICmsArticleAdInfoService /** * 删除文章广告信息 - * + * * @param adId 文章广告ID * @return 结果 */ diff --git a/ruoyi-content/src/main/java/com/ruoyi/content/service/impl/CmsArticleAdInfoServiceImpl.java b/ruoyi-content/src/main/java/com/ruoyi/content/service/impl/CmsArticleAdInfoServiceImpl.java index 0a034be41..b3f2f3b67 100644 --- a/ruoyi-content/src/main/java/com/ruoyi/content/service/impl/CmsArticleAdInfoServiceImpl.java +++ b/ruoyi-content/src/main/java/com/ruoyi/content/service/impl/CmsArticleAdInfoServiceImpl.java @@ -1,14 +1,20 @@ package com.ruoyi.content.service.impl; -import java.util.List; - +import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.content.constants.PropertiesConstants; +import com.ruoyi.content.domain.CmsArticleAdInfo; +import com.ruoyi.content.mapper.CmsArticleAdInfoMapper; +import com.ruoyi.content.service.ICmsArticleAdInfoService; +import com.ruoyi.content.utils.OSSUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.ruoyi.content.mapper.CmsArticleAdInfoMapper; -import com.ruoyi.content.domain.CmsArticleAdInfo; -import com.ruoyi.content.service.ICmsArticleAdInfoService; -import com.ruoyi.common.core.text.Convert; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; /** * 文章广告Service业务层处理 @@ -19,6 +25,8 @@ import com.ruoyi.common.core.text.Convert; @Service public class CmsArticleAdInfoServiceImpl implements ICmsArticleAdInfoService { + private static final Logger LOGGER = LoggerFactory.getLogger(CmsArticleAdInfoServiceImpl.class); + @Autowired private CmsArticleAdInfoMapper cmsArticleAdInfoMapper; @@ -41,18 +49,50 @@ public class CmsArticleAdInfoServiceImpl implements ICmsArticleAdInfoService { */ @Override public List selectCmsArticleAdInfoList(CmsArticleAdInfo cmsArticleAdInfo) { + cmsArticleAdInfo.setAdState("0"); + cmsArticleAdInfo.setCompanyId("1"); return cmsArticleAdInfoMapper.selectCmsArticleAdInfoList(cmsArticleAdInfo); } /** * 新增文章广告 * + * @param file 广告图片 * @param cmsArticleAdInfo 文章广告 - * @return 结果 + * @return */ @Override - public int insertCmsArticleAdInfo(CmsArticleAdInfo cmsArticleAdInfo) { - cmsArticleAdInfo.setCreateTime(DateUtils.getNowDate()); + public int insertCmsArticleAdInfo(MultipartFile file, CmsArticleAdInfo cmsArticleAdInfo) { + if (!file.isEmpty()) { + String fileName = file.getOriginalFilename();// 文件名 + String ext = fileName.substring(fileName.lastIndexOf("."), fileName.length());// 文件后缀 + String fileTime = DateUtils.getMillisecond(); + fileName = PropertiesConstants.AD_IMG_PATH + fileTime + ext;// OSS保存路径 + String flag = null; + try { + flag = OSSUtil.uploadFileByInputStream(PropertiesConstants.OSSENDPOINT, PropertiesConstants.OSSID, PropertiesConstants.OSSKEY, + PropertiesConstants.BUCKETNAME, file.getInputStream(), PropertiesConstants.OSSPATH + fileName); + } catch (IOException e) { + LOGGER.error("上传阿里云失败!", e); + } + if (null == flag || flag.equals("false")) { + LOGGER.info("广告图片上传oss失败"); + return 0; + } else { + cmsArticleAdInfo.setAdImageUrl(PropertiesConstants.OSS_URL + PropertiesConstants.OSSPATH + fileName); + } + } + String date = DateUtils.getDate(); + String time = DateUtils.getTimeNow(); + cmsArticleAdInfo.setAdLinkUrl(cmsArticleAdInfo.getAdLinkUrl() + "("); + cmsArticleAdInfo.setCompanyId("1"); + cmsArticleAdInfo.setAdState("0"); + cmsArticleAdInfo.setCreateDate(date); + cmsArticleAdInfo.setCreateTime(time); + cmsArticleAdInfo.setCreateUser("company"); + cmsArticleAdInfo.setUpdateDate(date); + cmsArticleAdInfo.setUpdateTime(time); + cmsArticleAdInfo.setUpdateUser("company"); return cmsArticleAdInfoMapper.insertCmsArticleAdInfo(cmsArticleAdInfo); } @@ -64,7 +104,7 @@ public class CmsArticleAdInfoServiceImpl implements ICmsArticleAdInfoService { */ @Override public int updateCmsArticleAdInfo(CmsArticleAdInfo cmsArticleAdInfo) { - cmsArticleAdInfo.setUpdateTime(DateUtils.getNowDate()); + cmsArticleAdInfo.setUpdateTime(DateUtils.getDate()); return cmsArticleAdInfoMapper.updateCmsArticleAdInfo(cmsArticleAdInfo); } diff --git a/ruoyi-content/src/main/java/com/ruoyi/content/utils/OSSUtil.java b/ruoyi-content/src/main/java/com/ruoyi/content/utils/OSSUtil.java new file mode 100644 index 000000000..f358283f7 --- /dev/null +++ b/ruoyi-content/src/main/java/com/ruoyi/content/utils/OSSUtil.java @@ -0,0 +1,324 @@ +package com.ruoyi.content.utils; + +import com.aliyun.oss.OSSClient; +import com.aliyun.oss.model.*; +import com.ruoyi.content.constants.PropertiesConstants; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.util.HashMap; +import java.util.Map; + +public class OSSUtil { + + private static final Logger logger = LoggerFactory.getLogger(OSSUtil.class); + + /** + * 上传文件(文件输入流)到阿里云OSS + * + * @param ossEndPoint 阿里云OSS提供的ossEndPoint + * @param ossId 阿里云OSS提供的ossId + * @param ossKey 阿里云OSS提供的ossKey + * @param bucketName 阿里云OSS提供的ossBucket + * @param input 文件输入流 * @param ossPath oss上保存文件的路径 + * @throws Exception + */ + public static String uploadFileByInputStream(String ossEndPoint, String ossId, String ossKey, String bucketName, + InputStream input, String ossPath) { + try { + ObjectMetadata objectMeta = new ObjectMetadata(); + // objectMeta.setContentLength(file.length()); + // 可以在metadata中标记文件类型 + objectMeta.setContentType("multipart/form-data"); + OSSClient client = createOSSClient(ossEndPoint, ossId, ossKey); + PutObjectResult result = client.putObject(bucketName, ossPath, input, objectMeta); + client.shutdown(); + logger.info("上传阿里云OSS结果【{}】", result.getETag()); + return "success"; + } catch (Exception e) { + e.printStackTrace(); + logger.info("上传阿里云OSS出错!!"); + return "false"; + } finally { + if (null != input) { + try { + input.close(); + } catch (IOException e) { + e.printStackTrace(); + logger.info("上传阿里云OSS出错!"); + } + } + } + } + + /** + * 上传文件到阿里云OSS + * + * @param ossEndPoint 阿里云OSS提供的ossEndPoint + * @param ossId 阿里云OSS提供的ossId + * @param ossKey 阿里云OSS提供的ossKey + * @param bucketName 阿里云OSS提供的ossBucket + * @param localPath 本地文件的路径 + * @param ossPath oss上保存文件的路径 + * @throws Exception + */ + public static void uploadFile(String ossEndPoint, String ossId, String ossKey, String bucketName, String localPath, + String ossPath) { + InputStream input = null; + try { + File file = new File(localPath); + ObjectMetadata objectMeta = new ObjectMetadata(); + objectMeta.setContentLength(file.length()); + // 可以在metadata中标记文件类型 + objectMeta.setContentType("multipart/form-data"); + input = new FileInputStream(file); + OSSClient client = createOSSClient(ossEndPoint, ossId, ossKey); + PutObjectResult result = client.putObject(bucketName, ossPath, input, objectMeta); + client.shutdown(); + logger.info("上传阿里云OSS结果【{}】", result.getETag()); + } catch (Exception e) { + e.printStackTrace(); + logger.info("上传阿里云OSS出错!!"); + } finally { + if (null != input) { + try { + input.close(); + } catch (IOException e) { + e.printStackTrace(); + logger.info("上传阿里云OSS出错!"); + } + } + } + } + + /** + * 上传html文件到阿里云OSS + * + * @param ossEndPoint 阿里云OSS提供的ossEndPoint + * @param ossId 阿里云OSS提供的ossId + * @param ossKey 阿里云OSS提供的ossKey + * @param bucketName 阿里云OSS提供的ossBucket + * @param localPath 本地文件的路径 + * @param ossPath oss上保存文件的路径 + * @throws Exception + */ + public static void uploadFileHtml(String ossEndPoint, String ossId, String ossKey, String bucketName, String localPath, + String ossPath) { + InputStream input = null; + try { + File file = new File(localPath); + ObjectMetadata objectMeta = new ObjectMetadata(); + objectMeta.setContentLength(file.length()); + // 可以在metadata中标记文件类型 + objectMeta.setContentType("text/html"); + input = new FileInputStream(file); + OSSClient client = createOSSClient(ossEndPoint, ossId, ossKey); + PutObjectResult result = client.putObject(bucketName, ossPath, input, objectMeta); + client.shutdown(); + logger.info("上传阿里云OSS结果【{}】", result.getETag()); + } catch (Exception e) { + e.printStackTrace(); + logger.info("上传阿里云OSS出错!!"); + } finally { + if (null != input) { + try { + input.close(); + } catch (IOException e) { + e.printStackTrace(); + logger.info("上传阿里云OSS出错!"); + } + } + } + } + + /** + * 从阿里云OSS上下载文件 (不保存本地) + * + * @param ossEndPoint 阿里云OSS提供的ossEndPointOut + * @param ossId 阿里云OSS提供的ossId + * @param ossKey 阿里云OSS提供的ossKey + * @param ossBucket 阿里云OSS提供的ossBucket + * @param path 阿里云OSS上保存文件的路径 + * @return + */ + public static byte[] downloadFile(String ossEndPoint, String ossId, String ossKey, String ossBucket, String path) { + OSSClient client = createOSSClient(ossEndPoint, ossId, ossKey); + OSSObject ossObject = client.getObject(ossBucket, path); + ObjectMetadata meta = client.getObjectMetadata(ossBucket, path); + client.shutdown(); + meta.getContentEncoding(); + InputStream inputStream = null; + ByteArrayOutputStream bos = null; + byte[] b = new byte[1024]; + int len; + try { + inputStream = ossObject.getObjectContent(); + bos = new ByteArrayOutputStream(); + while ((len = inputStream.read(b)) != -1) { + bos.write(b, 0, len); + } + } catch (IOException e) { + e.printStackTrace(); + logger.info("从阿里云OSS下载文件出错!"); + } finally { + if (null != inputStream) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + logger.info("从阿里云OSS下载文件出错!"); + } + } + if (null != bos) { + try { + bos.close(); + } catch (IOException e) { + e.printStackTrace(); + logger.info("从阿里云OSS下载文件出错!"); + } + } + } + return bos.toByteArray(); + } + + /** + * 从阿里云OSS上下载文件 并保存指定路径下 + * + * @param ossEndPoint 阿里云OSS提供的ossEndPoint + * @param ossId 阿里云OSS提供的ossId + * @param ossKey 阿里云OSS提供的ossKey + * @param bucketName 阿里云OSS提供的ossBucket + * @param ossPath 阿里云OSS上保存文件的路径 + * @param localPath 保存本地的路径(包括文件名) + * @return oss上下载下来的文件的字节数组 + */ + public static void downloadAndSaveFile(String ossEndPoint, String ossId, String ossKey, String bucketName, + String ossPath, String localPath) { + OSSClient client = createOSSClient(ossEndPoint, ossId, ossKey); + + File localFileDir = new File(localPath); + if (!localFileDir.exists()) { + localFileDir.mkdirs(); + if (!localFileDir.exists()) { + logger.info("本地目录不存在,且尝试创建失败!"); + } + } + + File file = new File(localPath); + logger.info("创建文件目录:" + localPath); + client.getObject(new GetObjectRequest(bucketName, ossPath), file); + client.shutdown(); + + } + + /** + * 删除阿里云OSS文件 + * + * @param ossEndPoint 阿里云OSS提供的ossEndPoint + * @param ossId 阿里云OSS提供的ossId + * @param ossKey 阿里云OSS提供的ossKey + * @param ossBucket 阿里云OSS提供的ossBucket + * @param path 阿里云OSS上保存文件的路径 + * @return + */ + public static void deleteFile(String ossEndPoint, String ossId, String ossKey, String ossBucket, String path) { + OSSClient client = createOSSClient(ossEndPoint, ossId, ossKey); + client.deleteObject(ossBucket, path); + client.shutdown(); + } + + /** + * 查询OSS内的文件列表 + * + * @param ossEndPoint + * @param ossId + * @param ossKey + * @param bucketName + * @param path + */ + public static void findFileList(String ossEndPoint, String ossId, String ossKey, String bucketName, String path) { + OSSClient client = createOSSClient(ossEndPoint, ossId, ossKey); + // 构造ListObjectsRequest请求 + ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName); + if (StringUtils.isNotBlank(path)) { + listObjectsRequest.setPrefix(path); // fun/ + } + // 递归列出fun目录下的所有文件 + ObjectListing listing = client.listObjects(listObjectsRequest); + // 遍历所有Object + logger.info("Objects内的文件:"); + for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) { + logger.info("文件名【{}】, 文件大小【{}】", objectSummary.getKey(), objectSummary.getSize()); + } + // 遍历所有CommonPrefix + logger.info("\nCommonPrefixs:"); + for (String commonPrefix : listing.getCommonPrefixes()) { + logger.info(commonPrefix); + } + } + + private static OSSClient createOSSClient(String ossEndPoint, String ossId, String ossKey) { + // ClientConfiguration config = new ClientConfiguration(); + // config.setProxyHost("10.0.251.94"); + // config.setProxyPort(8080); + // config.setProxyUsername("gaining"); + // config.setProxyPassword("abcd123%"); + // TODO + // 本地设置代理 + // OSSClient client = new OSSClient(ossEndPoint, ossId, ossKey, config); + OSSClient client = new OSSClient(ossEndPoint, ossId, ossKey); + return client; + } + + public static void main(String[] args) { + uploadFile("oss-cn-szfinance.aliyuncs.com", + "LTAIsVIQ8j9WueV2", "Il5Y1tugBi9u8giGi9n4lQhAWwkcih", + "hx-cdn-int", "G:\\111.jpg", "gv/YXPT/network/article/450.jpg"); +// uploadFile("oss-cn-beijing.aliyuncs.com", "6TpnBLywxITY6YNA", +// "dbYhx45upstobHmBBErQQkZlrC017X", "lifeilong", "F:\\图片\\460.jpg", +// "我的照片/460.jpg"); + } + + public static Map uploadFileByInputStreamReturnUrl(String ossEndPoint, String ossId, String ossKey, + String bucketName, InputStream input, String ossPath) { + Map map = new HashMap(); + try { + ObjectMetadata objectMeta = new ObjectMetadata(); + // objectMeta.setContentLength(file.length()); + // 可以在metadata中标记文件类型 + objectMeta.setContentType("multipart/form-data"); + OSSClient client = createOSSClient(ossEndPoint, ossId, ossKey); + PutObjectResult result = client.putObject(bucketName, ossPath, input, objectMeta); + client.shutdown(); + logger.info("上传阿里云OSS结果【{}】", result.getETag()); + map.put("ossFIleId", result.getETag()); + // 设置URL过期时间为10年 3600l* 1000*24*365*10 +// Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10); + // 生成URL +// URL url = client.generatePresignedUrl(bucketName, ossPath, expiration); +// if (url != null) { + map.put("result", true); + map.put("url", PropertiesConstants.OSS_URL + ossPath); +// } else { +// msg.setResult(false); +// msg.setInfo("上传阿里云获取访问地址失败!"); +// } + return map; + } catch (Exception e) { + logger.error("上传阿里云OSS出错!!", e); + map.put("result", false); + return map; + } finally { + if (null != input) { + try { + input.close(); + } catch (IOException e) { + logger.error("上传阿里云OSS出错!", e); + } + } + } + } + +} diff --git a/ruoyi-content/src/main/resources/mapper/content/CmsArticleAdInfoMapper.xml b/ruoyi-content/src/main/resources/mapper/content/CmsArticleAdInfoMapper.xml index edc0eac1c..c56322d90 100644 --- a/ruoyi-content/src/main/resources/mapper/content/CmsArticleAdInfoMapper.xml +++ b/ruoyi-content/src/main/resources/mapper/content/CmsArticleAdInfoMapper.xml @@ -35,7 +35,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and AD_TYPE = #{adType} and AD_TYPE_NAME like concat('%', #{adTypeName}, '%') and AD_LINK_URL = #{adLinkUrl} - and AD_TITLE = #{adTitle} + and AD_TITLE like concat('%', #{adTitle}, '%') and AD_NAME like concat('%', #{adName}, '%') and AD_SUMMARY = #{adSummary} and AD_COLOR_TYPE = #{adColorType} @@ -48,6 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and UPDATE_DATE = #{updateDate} and UPDATE_TIME = #{updateTime} + order by CREATE_DATE DESC,CREATE_TIME DESC, UPDATE_DATE DESC,UPDATE_TIME DESC \n",P='\n",z='
\n",A='\n'+i.OBJECT_PARAMS+" "+i.DEFAULT_PREVIEW+"\n\n",$='\n\n'+i.OBJECT_PARAMS+" "+i.DEFAULT_PREVIEW+"\n\n",D='\n',U='
\n'+i.DEFAULT_PREVIEW+"\n
\n",B='',j={width:"100%",height:"100%","min-height":"480px"},L.defaults={layoutTemplates:{main1:t,main2:a,preview:n,close:o,fileIcon:r,caption:l,modalMain:u,modal:p,progress:f,size:m,footer:v,indicator:C,actions:h,actionDelete:g,actionUpload:w,actionZoom:_,actionDrag:b,btnDefault:s,btnLink:d,btnBrowse:c,zoomCache:B},previewMarkupTags:{tagBefore1:T,tagBefore2:E,tagAfter:x},previewContentTemplates:{generic:F,html:S,image:I,text:k,video:P,audio:z,flash:A,object:$,pdf:D,other:U},allowedPreviewTypes:["image","html","text","video","audio","flash","pdf","object"],previewTemplates:{},previewSettings:{image:{width:"auto",height:"160px"},html:{width:"213px",height:"160px"},text:{width:"213px",height:"160px"},video:{width:"auto",height:"100%","max-width":"100%"},audio:{width:"100%",height:"30px"},flash:{width:"auto",height:"100%","max-width":"100%"},object:{height:"100%"},pdf:{width:"160px",height:"160px"},other:{width:"160px",height:"160px"}},previewZoomSettings:{image:{width:"auto",height:"auto","max-width":"100%","max-height":"100%"},html:j,text:j,video:{width:"auto",height:"100%","max-width":"100%"},audio:{width:"100%",height:"30px"},flash:{width:"auto",height:"480px"},object:{width:"auto",height:"100%","max-width":"100%","min-height":"480px"},pdf:j,other:{width:"auto",height:"100%","min-height":"480px"}},fileTypeSettings:{image:function(e,t){return i.compare(e,"image.*")||i.compare(t,/\.(gif|png|jpe?g)$/i)},html:function(e,t){return i.compare(e,"text/html")||i.compare(t,/\.(htm|html)$/i)},text:function(e,t){return i.compare(e,"text.*")||i.compare(t,/\.(xml|javascript)$/i)||i.compare(t,/\.(txt|md|csv|nfo|ini|json|php|js|css)$/i)},video:function(e,t){return i.compare(e,"video.*")&&(i.compare(e,/(ogg|mp4|mp?g|mov|webm|3gp)$/i)||i.compare(t,/\.(og?|mp4|webm|mp?g|mov|3gp)$/i))},audio:function(e,t){return i.compare(e,"audio.*")&&(i.compare(t,/(ogg|mp3|mp?g|wav)$/i)||i.compare(t,/\.(og?|mp3|mp?g|wav)$/i))},flash:function(e,t){return i.compare(e,"application/x-shockwave-flash",!0)||i.compare(t,/\.(swf)$/i)},pdf:function(e,t){return i.compare(e,"application/pdf",!0)||i.compare(t,/\.(pdf)$/i)},object:function(){return!0},other:function(){return!0}},fileActionSettings:{showRemove:!0,showUpload:!0,showZoom:!0,showDrag:!0,removeIcon:'',removeClass:"btn btn-xs btn-default",removeTitle:"Remove file",uploadIcon:'',uploadClass:"btn btn-xs btn-default",uploadTitle:"Upload file",zoomIcon:'',zoomClass:"btn btn-xs btn-default",zoomTitle:"View Details",dragIcon:'',dragClass:"text-info",dragTitle:"Move / Rearrange",dragSettings:{},indicatorNew:'',indicatorSuccess:'',indicatorError:'',indicatorLoading:'',indicatorNewTitle:"Not uploaded yet",indicatorSuccessTitle:"Uploaded",indicatorErrorTitle:"Upload Error",indicatorLoadingTitle:"Uploading ..."}},e.each(L.defaults,function(i,t){return"allowedPreviewTypes"===i?void(void 0===L.allowedPreviewTypes&&(L.allowedPreviewTypes=t)):void(L[i]=e.extend(!0,{},t,L[i]))}),L._initPreviewTemplates()},_initPreviewTemplates:function(){var t,a=this,n=a.defaults,r=a.previewMarkupTags,o=r.tagAfter;e.each(n.previewContentTemplates,function(e,n){i.isEmpty(a.previewTemplates[e])&&(t=r.tagBefore2,"generic"!==e&&"image"!==e&&"html"!==e&&"text"!==e||(t=r.tagBefore1),a.previewTemplates[e]=t+n+o)})},_initPreviewCache:function(){var t=this;t.previewCache={data:{},init:function(){var e=t.initialPreview;e.length>0&&!i.isArray(e)&&(e=e.split(t.initialPreviewDelimiter)),t.previewCache.data={content:e,config:t.initialPreviewConfig,tags:t.initialPreviewThumbTags}},fetch:function(){return t.previewCache.data.content.filter(function(e){return null!==e})},count:function(e){return t.previewCache.data&&t.previewCache.data.content?e?t.previewCache.data.content.length:t.previewCache.fetch().length:0},get:function(a,n){var r,o,l,s,d,c,u,p="init_"+a,f=t.previewCache.data,m=f.config[a],v=f.content[a],h=t.previewInitId+"-"+p,g=i.ifSet("previewAsData",m,t.initialPreviewAsData),w=function(e,a,n,r,o,l,s,d,c){return d=" file-preview-initial "+i.SORT_CSS+(d?" "+d:""),t._generatePreviewTemplate(e,a,n,r,o,!1,null,d,l,s,c)};return v?(n=void 0===n?!0:n,l=i.ifSet("type",m,t.initialPreviewFileType||"generic"),d=i.ifSet("filename",m,i.ifSet("caption",m)),c=i.ifSet("filetype",m,l),s=t.previewCache.footer(a,n,m&&m.size||null),u=i.ifSet("frameClass",m),r=g?w(l,v,d,c,h,s,p,u):w("generic",v,d,c,h,s,p,u,l).setTokens({content:f.content[a]}),f.tags.length&&f.tags[a]&&(r=i.replaceTags(r,f.tags[a])),i.isEmpty(m)||i.isEmpty(m.frameAttr)||(o=e(document.createElement("div")).html(r),o.find(".file-preview-initial").attr(m.frameAttr),r=o.html(),o.remove()),r):""},add:function(e,a,n,r){var o,l=t.previewCache.data;return i.isArray(e)||(e=e.split(t.initialPreviewDelimiter)),r?(o=l.content.push(e)-1,l.config[o]=a,l.tags[o]=n):(o=e.length-1,l.content=e,l.config=a,l.tags=n),t.previewCache.data=l,o},set:function(e,a,n,r){var o,l,s=t.previewCache.data;if(e&&e.length&&(i.isArray(e)||(e=e.split(t.initialPreviewDelimiter)),l=e.filter(function(e){return null!==e}),l.length)){if(void 0===s.content&&(s.content=[]),void 0===s.config&&(s.config=[]),void 0===s.tags&&(s.tags=[]),r){for(o=0;oi;i++)a+=t.previewCache.get(i);return e=t._getMsgSelected(t.previewCache.count()),{content:a,caption:e}},footer:function(e,a,n){var r=t.previewCache.data;if(!r||!r.config||0===r.config.length||i.isEmpty(r.config[e]))return"";a=void 0===a?!0:a;var o,l=r.config[e],s=i.ifSet("caption",l),d=i.ifSet("width",l,"auto"),c=i.ifSet("url",l,!1),u=i.ifSet("key",l,null),p=t.fileActionSettings,f=t.initialPreviewShowDelete||!1,m=i.ifSet("showDelete",l,i.ifSet("showDelete",p,f)),v=i.ifSet("showZoom",l,i.ifSet("showZoom",p,!0)),h=i.ifSet("showDrag",l,i.ifSet("showDrag",p,!0)),g=c===!1&&a;return o=t._renderFileActions(!1,m,v,h,g,c,u,!0),t._getLayoutTemplate("footer").setTokens({progress:t._renderThumbProgress(),actions:o,caption:s,size:t._getSize(n),width:d,indicator:""})}},t.previewCache.init()},_handler:function(e,i,t){var a=this,n=a.namespace,r=i.split(" ").join(n+" ")+n;e&&e.length&&e.off(r).on(r,t)},_log:function(e){var i=this,t=i.$element.attr("id");t&&(e='"'+t+'": '+e),"undefined"!=typeof window.console.log?window.console.log(e):window.alert(e)},_validate:function(){var e=this,i="file"===e.$element.attr("type");return i||e._log('The input "type" must be set to "file" for initializing the "bootstrap-fileinput" plugin.'),i},_errorsExist:function(){var i,t=this;return t.$errorContainer.find("li").length?!0:(i=e(document.createElement("div")).html(t.$errorContainer.html()),i.find("span.kv-error-close").remove(),i.find("ul").remove(),!!e.trim(i.text()).length)},_errorHandler:function(e,i){var t=this,a=e.target.error,n=function(e){t._showError(e.replace("{name}",i))};n(a.code===a.NOT_FOUND_ERR?t.msgFileNotFound:a.code===a.SECURITY_ERR?t.msgFileSecured:a.code===a.NOT_READABLE_ERR?t.msgFileNotReadable:a.code===a.ABORT_ERR?t.msgFilePreviewAborted:t.msgFilePreviewError)},_addError:function(e){var i=this,t=i.$errorContainer;e&&t.length&&(t.html(i.errorCloseButton+e),i._handler(t.find(".kv-error-close"),"click",function(){t.fadeOut("slow")}))},_resetErrors:function(e){var i=this,t=i.$errorContainer;i.isError=!1,i.$container.removeClass("has-error"),t.html(""),e?t.fadeOut("slow"):t.hide()},_showFolderError:function(e){var t,a=this,n=a.$errorContainer;e&&(t=a.msgFoldersNotAllowed.replace("{n}",e),a._addError(t),i.addCss(a.$container,"has-error"),n.fadeIn(800),a._raise("filefoldererror",[e,t]))},_showUploadError:function(e,t,a){var n=this,r=n.$errorContainer,o=a||"fileuploaderror",l=t&&t.id?'
  • '+e+"
  • ":"
  • "+e+"
  • ";return 0===r.find("ul").length?n._addError("
      "+l+"
    "):r.find("ul").append(l),r.fadeIn(800),n._raise(o,[t,e]),n.$container.removeClass("file-input-new"),i.addCss(n.$container,"has-error"),!0},_showError:function(e,t,a){var n=this,r=n.$errorContainer,o=a||"fileerror";return t=t||{},t.reader=n.reader,n._addError(e),r.fadeIn(800),n._raise(o,[t,e]),n.isUploadable||n._clearFileInput(),n.$container.removeClass("file-input-new"),i.addCss(n.$container,"has-error"),n.$btnUpload.attr("disabled",!0),!0},_noFilesError:function(e){var t=this,a=t.minFileCount>1?t.filePlural:t.fileSingle,n=t.msgFilesTooLess.replace("{n}",t.minFileCount).replace("{files}",a),r=t.$errorContainer;t._addError(n),t.isError=!0,t._updateFileDetails(0),r.fadeIn(800),t._raise("fileerror",[e,n]),t._clearFileInput(),i.addCss(t.$container,"has-error")},_parseError:function(i,t,a,n){var r=this,o=e.trim(a+""),l="."===o.slice(-1)?"":".",s=void 0!==t.responseJSON&&void 0!==t.responseJSON.error?t.responseJSON.error:t.responseText;return r.cancelling&&r.msgUploadAborted&&(o=r.msgUploadAborted),r.showAjaxErrorDetails&&s?(s=e.trim(s.replace(/\n\s*\n/g,"\n")),s=s.length>0?"
    "+s+"
    ":"",o+=l+s):o+=l,o===l&&(o=r.msgAjaxError.replace("{operation}",i)),r.cancelling=!1,n?""+n+": "+o:o},_parseFileType:function(e){var t,a,n,r,o=this,l=o.allowedPreviewTypes||[];for(r=0;r-1&&(t=i.split(".").pop(),a.previewFileIconSettings&&(n=a.previewFileIconSettings[t]||a.previewFileIconSettings[t.toLowerCase()]||null),a.previewFileExtSettings&&e.each(a.previewFileExtSettings,function(e,i){return a.previewFileIconSettings[e]&&i(t)?void(n=a.previewFileIconSettings[e]):void 0})),n},_parseFilePreviewIcon:function(e,i){var t=this,a=t._getPreviewIcon(i)||t.previewFileIcon,n=e;return n.indexOf("{previewFileIcon}")>-1&&(n=n.setTokens({previewFileIconClass:t.previewFileIconClass,previewFileIcon:a})),n},_raise:function(i,t){var a=this,n=e.Event(i);if(void 0!==t?a.$element.trigger(n,t):a.$element.trigger(n),n.isDefaultPrevented()||n.result===!1)return!1;switch(i){case"filebatchuploadcomplete":case"filebatchuploadsuccess":case"fileuploaded":case"fileclear":case"filecleared":case"filereset":case"fileerror":case"filefoldererror":case"fileuploaderror":case"filebatchuploaderror":case"filedeleteerror":case"filecustomerror":case"filesuccessremove":break;default:a.ajaxAborted||(a.ajaxAborted=n.result)}return!0},_listenFullScreen:function(e){var i,t,a=this,n=a.$modal;n&&n.length&&(i=n&&n.find(".btn-fullscreen"),t=n&&n.find(".btn-borderless"),i.length&&t.length&&(i.removeClass("active").attr("aria-pressed","false"),t.removeClass("active").attr("aria-pressed","false"),e?i.addClass("active").attr("aria-pressed","true"):t.addClass("active").attr("aria-pressed","true"),n.hasClass("file-zoom-fullscreen")?a._maximizeZoomDialog():e?a._maximizeZoomDialog():t.removeClass("active").attr("aria-pressed","false")))},_listen:function(){var t,a=this,n=a.$element,r=a.$form,o=a.$container;a._handler(n,"change",e.proxy(a._change,a)),a.showBrowse&&a._handler(a.$btnFile,"click",e.proxy(a._browse,a)),a._handler(o.find(".fileinput-remove:not([disabled])"),"click",e.proxy(a.clear,a)),a._handler(o.find(".fileinput-cancel"),"click",e.proxy(a.cancel,a)),a._initDragDrop(),a._handler(r,"reset",e.proxy(a.reset,a)),a.isUploadable||a._handler(r,"submit",e.proxy(a._submitForm,a)),a._handler(a.$container.find(".fileinput-upload"),"click",e.proxy(a._uploadClick,a)),a._handler(e(window),"resize",function(){a._listenFullScreen(screen.width===window.innerWidth&&screen.height===window.innerHeight)}),t="webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange",a._handler(e(document),t,function(){a._listenFullScreen(i.checkFullScreen())}),a._initClickable()},_initClickable:function(){var t,a=this;a.isClickable&&(t=a.isUploadable?a.$dropZone:a.$preview.find(".file-default-preview"),i.addCss(t,"clickable"),t.attr("tabindex",-1),a._handler(t,"click",function(i){var n=e(i.target);n.parents(".file-preview-thumbnails").length&&!n.parents(".file-default-preview").length||(a.$element.trigger("click"),t.blur())}))},_initDragDrop:function(){var i=this,t=i.$dropZone;i.isUploadable&&i.dropZoneEnabled&&i.showPreview&&(i._handler(t,"dragenter dragover",e.proxy(i._zoneDragEnter,i)),i._handler(t,"dragleave",e.proxy(i._zoneDragLeave,i)),i._handler(t,"drop",e.proxy(i._zoneDrop,i)),i._handler(e(document),"dragenter dragover drop",i._zoneDragDropInit))},_zoneDragDropInit:function(e){e.stopPropagation(),e.preventDefault()},_zoneDragEnter:function(t){var a=this,n=e.inArray("Files",t.originalEvent.dataTransfer.types)>-1;return a._zoneDragDropInit(t),a.isDisabled||!n?(t.originalEvent.dataTransfer.effectAllowed="none",void(t.originalEvent.dataTransfer.dropEffect="none")):void i.addCss(a.$dropZone,"file-highlighted")},_zoneDragLeave:function(e){var i=this;i._zoneDragDropInit(e),i.isDisabled||i.$dropZone.removeClass("file-highlighted")},_zoneDrop:function(e){var t=this;e.preventDefault(),t.isDisabled||i.isEmpty(e.originalEvent.dataTransfer.files)||(t._change(e,"dragdrop"),t.$dropZone.removeClass("file-highlighted"))},_uploadClick:function(e){var t,a=this,n=a.$container.find(".fileinput-upload"),r=!n.hasClass("disabled")&&i.isEmpty(n.attr("disabled"));if(!e||!e.isDefaultPrevented()){if(!a.isUploadable)return void(r&&"submit"!==n.attr("type")&&(t=n.closest("form"),t.length&&t.trigger("submit"),e.preventDefault()));e.preventDefault(),r&&a.upload()}},_submitForm:function(){var e=this;return e._isFileSelectionValid()&&!e._abort({})},_clearPreview:function(){var t=this,a=t.$preview,n=t.showUploadedThumbs?t.getFrames(":not(.file-preview-success)"):t.getFrames();n.each(function(){var t=e(this);t.remove(),i.cleanZoomCache(a.find("#zoom-"+t.attr("id")))}),t.getFrames().length&&t.showPreview||t._resetUpload(),t._validateDefaultPreview()},_initSortable:function(){var t,a=this,n=a.$preview,r="."+i.SORT_CSS;window.KvSortable&&0!==n.find(r).length&&(t={handle:".drag-handle-init",dataIdAttr:"data-preview-id",scroll:!1,draggable:r,onSort:function(t){var n,r,o=t.oldIndex,l=t.newIndex;a.initialPreview=i.moveArray(a.initialPreview,o,l),a.initialPreviewConfig=i.moveArray(a.initialPreviewConfig,o,l),a.previewCache.init();for(var s=0;s