diff --git a/AutoSprout-admin/src/main/resources/application.yml b/AutoSprout-admin/src/main/resources/application.yml index d0541b9..dc252ea 100644 --- a/AutoSprout-admin/src/main/resources/application.yml +++ b/AutoSprout-admin/src/main/resources/application.yml @@ -201,6 +201,8 @@ qiniu: bucket: autosprout # 过期时间(秒) expireSeconds: 86400 + # 七牛云token缓存 + cacheKey: qiniu-token # 七牛云GET请求域名 domain: https://lxnapi.ccttiot.com xinzhi: diff --git a/AutoSprout-common/src/main/java/com/ruoyi/common/utils/qiniu/QiNiuUtils.java b/AutoSprout-common/src/main/java/com/ruoyi/common/utils/qiniu/QiNiuUtils.java index 44b9595..4bba92e 100644 --- a/AutoSprout-common/src/main/java/com/ruoyi/common/utils/qiniu/QiNiuUtils.java +++ b/AutoSprout-common/src/main/java/com/ruoyi/common/utils/qiniu/QiNiuUtils.java @@ -2,8 +2,11 @@ package com.ruoyi.common.utils.qiniu; import com.qiniu.util.Auth; import com.qiniu.util.StringMap; +import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.spring.SpringUtils; +import java.util.concurrent.TimeUnit; + /** * 七牛云工具类 * @author wjh @@ -16,15 +19,32 @@ public class QiNiuUtils { public static final String BUCKET = SpringUtils.getRequiredProperty("qiniu.bucket"); public static final Long EXPIRE_SECONDS = Long.parseLong(SpringUtils.getRequiredProperty("qiniu.expireSeconds")); // 过期时间(秒) public static final String DOMAIN = SpringUtils.getRequiredProperty("qiniu.domain"); // 域名 + private static final RedisCache REDIS_CACHE = SpringUtils.getBean(RedisCache.class); + private static final String CACHE_KEY = SpringUtils.getRequiredProperty("qiniu.cacheKey"); + + /** + * 获取文件上传的token + * @return token + */ +// public static String getToken() { +// StringMap putPolicy = new StringMap(); +// Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY); +// return auth.uploadToken(BUCKET,null, EXPIRE_SECONDS, putPolicy); +// } /** * 获取文件上传的token * @return token */ public static String getToken() { - StringMap putPolicy = new StringMap(); - Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY); - return auth.uploadToken(BUCKET,null, EXPIRE_SECONDS, putPolicy); + String tokenCache = REDIS_CACHE.getCacheObject(CACHE_KEY); + if (tokenCache == null) { + StringMap putPolicy = new StringMap(); + Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY); + tokenCache = auth.uploadToken(BUCKET,null, EXPIRE_SECONDS, putPolicy); + REDIS_CACHE.setCacheObject(CACHE_KEY, tokenCache, EXPIRE_SECONDS.intValue(), TimeUnit.SECONDS); + } + return tokenCache; } // public static void main(String[] args) { diff --git a/AutoSprout-ui/src/api/common/common.js b/AutoSprout-ui/src/api/tool/common.js similarity index 100% rename from AutoSprout-ui/src/api/common/common.js rename to AutoSprout-ui/src/api/tool/common.js diff --git a/AutoSprout-ui/src/assets/fileicons/excel.png b/AutoSprout-ui/src/assets/fileicons/excel.png new file mode 100644 index 0000000..5180e73 Binary files /dev/null and b/AutoSprout-ui/src/assets/fileicons/excel.png differ diff --git a/AutoSprout-ui/src/assets/fileicons/pdf.png b/AutoSprout-ui/src/assets/fileicons/pdf.png new file mode 100644 index 0000000..6b7fcc9 Binary files /dev/null and b/AutoSprout-ui/src/assets/fileicons/pdf.png differ diff --git a/AutoSprout-ui/src/assets/fileicons/ppt.png b/AutoSprout-ui/src/assets/fileicons/ppt.png new file mode 100644 index 0000000..0e7ba8d Binary files /dev/null and b/AutoSprout-ui/src/assets/fileicons/ppt.png differ diff --git a/AutoSprout-ui/src/assets/fileicons/unknown.png b/AutoSprout-ui/src/assets/fileicons/unknown.png new file mode 100644 index 0000000..cf7bd02 Binary files /dev/null and b/AutoSprout-ui/src/assets/fileicons/unknown.png differ diff --git a/AutoSprout-ui/src/assets/fileicons/video.png b/AutoSprout-ui/src/assets/fileicons/video.png new file mode 100644 index 0000000..867e175 Binary files /dev/null and b/AutoSprout-ui/src/assets/fileicons/video.png differ diff --git a/AutoSprout-ui/src/assets/fileicons/word.png b/AutoSprout-ui/src/assets/fileicons/word.png new file mode 100644 index 0000000..f2230cb Binary files /dev/null and b/AutoSprout-ui/src/assets/fileicons/word.png differ diff --git a/AutoSprout-ui/src/assets/fileicons/zip.png b/AutoSprout-ui/src/assets/fileicons/zip.png new file mode 100644 index 0000000..d86c4b3 Binary files /dev/null and b/AutoSprout-ui/src/assets/fileicons/zip.png differ diff --git a/AutoSprout-ui/src/components/FileUpload/index.vue b/AutoSprout-ui/src/components/FileUpload/index.vue index fb31669..177b0d3 100644 --- a/AutoSprout-ui/src/components/FileUpload/index.vue +++ b/AutoSprout-ui/src/components/FileUpload/index.vue @@ -10,7 +10,7 @@ :on-exceed="handleExceed" :on-success="handleUploadSuccess" :show-file-list="false" - :data="uploadData" + :headers="headers" class="upload-file-uploader" ref="fileUpload" > @@ -28,9 +28,13 @@
  • - - {{ getFileName(file.name) }} - +
    删除
    @@ -40,8 +44,7 @@ diff --git a/AutoSprout-ui/src/utils/constants.js b/AutoSprout-ui/src/utils/constants.js new file mode 100644 index 0000000..c8cacd8 --- /dev/null +++ b/AutoSprout-ui/src/utils/constants.js @@ -0,0 +1,19 @@ +// 文件类型 +export const FileType = { + // 图片 + IMAGE: ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'webp', 'ico'], + // 办公 + OFFICE: ['doc', 'docx', 'xls', 'xlsx', 'pdf', 'ppt', 'pptx'], + // 音频 + AUDIO: ['mp3', 'wav', 'm4a', 'ogg', 'flac', 'aac'], + // 视频 + VIDEO: ['mp4', 'avi', 'mov', 'wmv', 'flv', 'mpeg', 'mpg', 'm4v', 'webm', 'mkv'], + // 压缩文件 + ZIP: ['zip', 'rar', '7z'], + // 其他 + OTHER: ['exe'], + // 全部 + all() { + return [...this.IMAGE, ...this.OFFICE, ...this.AUDIO, ...this.VIDEO, ...this.OTHER, ...this.ZIP]; + } +} diff --git a/AutoSprout-ui/src/utils/index.js b/AutoSprout-ui/src/utils/index.js index 4e65504..22d2e04 100644 --- a/AutoSprout-ui/src/utils/index.js +++ b/AutoSprout-ui/src/utils/index.js @@ -1,16 +1,17 @@ import { parseTime } from './ruoyi' +import {FileType} from "@/utils/constants"; /** * 表格时间格式化 */ export function formatDate(cellValue) { if (cellValue == null || cellValue == "") return ""; - var date = new Date(cellValue) + var date = new Date(cellValue) var year = date.getFullYear() var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1 - var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate() - var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours() - var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() + var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate() + var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours() + var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds() return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds } @@ -77,6 +78,64 @@ export function getQueryObject(url) { return obj } +// 获取真实url +export function getRealUrl(url) { + if (url == null ) { + return url; + } + if (url.startsWith('http')) { + return url; + } + return `${process.env.VUE_APP_BASE_API}${url}`; +} + +// 获取文件图标 +export function getFileIcon(fileName) { + const ext = getExt(fileName); + if(['doc', 'docx'].includes(ext)) { + return require('@/assets/fileicons/word.png'); + } else if(['xls', 'xlsx'].includes(ext)) { + return require('@/assets/fileicons/excel.png'); + } else if(['ppt', 'pptx'].includes(ext)) { + return require('@/assets/fileicons/ppt.png'); + } else if(ext === 'pdf') { + return require('@/assets/fileicons/pdf.png'); + } else if(FileType.VIDEO.includes(ext)) { + return require('@/assets/fileicons/video.png'); + } else if(FileType.ZIP.includes(ext)) { + return require('@/assets/fileicons/zip.png'); + } + return require('@/assets/fileicons/unknown.png'); +} + +// 获取文件扩展名 +export function getExt(fileName) { + let fileExtension = ''; + if (fileName.lastIndexOf(".") > -1) { + fileExtension = fileName.slice(fileName.lastIndexOf(".") + 1).toLowerCase(); + } + return fileExtension; +} + +// 是否为图片 +export function isImage(url) { + const ext = getExt(url); + return FileType.IMAGE.includes(ext); +} + +// 是否为视频 +export function isVideo(url) { + const ext = getExt(url); + return FileType.VIDEO.includes(ext); +} + +// 为文件名在后缀和名称之间拼接时间戳 +export function getFileNameWithTime(fileName) { + const ext = getExt(fileName); + const name = fileName.slice(0, fileName.lastIndexOf(".")); + return `${name}-${Date.now()}.${ext}`; +} + /** * @param {string} input value * @returns {number} output value @@ -330,7 +389,7 @@ export function makeMap(str, expectsLowerCase) { ? val => map[val.toLowerCase()] : val => map[val] } - + export const exportDefault = 'export default ' export const beautifierConf = { @@ -387,4 +446,4 @@ export function camelCase(str) { export function isNumberStr(str) { return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str) } - + diff --git a/AutoSprout-ui/src/views/device/model/index.vue b/AutoSprout-ui/src/views/device/model/index.vue index a7e4c07..a11b09c 100644 --- a/AutoSprout-ui/src/views/device/model/index.vue +++ b/AutoSprout-ui/src/views/device/model/index.vue @@ -94,7 +94,7 @@ - +