diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java index bc2d59e5..784edad4 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java @@ -12,7 +12,4 @@ public class CloudConstant { */ public final static String CLOUD_STORAGE_CONFIG_KEY = "sys.oss.cloudStorageService"; - public final static String DEFAULT_CONTENT_TYPE = "application/octet-stream"; - - } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java index f6d4cd42..d499eb57 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageServiceImpl.java @@ -1,7 +1,6 @@ package com.ruoyi.oss.service.impl; import cn.hutool.core.util.StrUtil; -import com.ruoyi.oss.constant.CloudConstant; import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.enumd.CloudServiceEnumd; import com.ruoyi.oss.enumd.PolicyType; @@ -14,6 +13,7 @@ import io.minio.*; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; +import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import java.io.ByteArrayInputStream; @@ -70,7 +70,7 @@ public class MinioCloudStorageServiceImpl extends AbstractCloudStorageService im minioClient.putObject(PutObjectArgs.builder() .bucket(properties.getBucketName()) .object(path) - .contentType(StrUtil.blankToDefault(contentType, CloudConstant.DEFAULT_CONTENT_TYPE)) + .contentType(StrUtil.blankToDefault(contentType, MediaType.APPLICATION_OCTET_STREAM_VALUE)) .stream(inputStream, inputStream.available(), -1) .build()); } catch (Exception e) { diff --git a/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java b/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java index 9d1e9173..7ebca5fa 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/system/controller/SysOssController.java @@ -1,6 +1,8 @@ package com.ruoyi.system.controller; +import cn.hutool.core.convert.Convert; +import cn.hutool.http.HttpUtil; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.core.controller.BaseController; @@ -18,12 +20,15 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotEmpty; +import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -74,6 +79,20 @@ public class SysOssController extends BaseController { return AjaxResult.success(map); } + @ApiOperation("下载OSS云存储") + @PreAuthorize("@ss.hasPermi('system:oss:download')") + @GetMapping("/download/{ossId}") + public void download(@PathVariable Long ossId, HttpServletResponse response) throws IOException { + SysOss sysOss = iSysOssService.getById(ossId); + if (sysOss == null) { + throw new CustomException("文件数据不存在!"); + } + response.reset(); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8"); + long data = HttpUtil.download(sysOss.getUrl(), response.getOutputStream(), false); + response.setContentLength(Convert.toInt(data)); + } + /** * 删除OSS云存储 */ diff --git a/ruoyi-ui/src/api/system/oss.js b/ruoyi-ui/src/api/system/oss.js index e36ef165..39be5971 100644 --- a/ruoyi-ui/src/api/system/oss.js +++ b/ruoyi-ui/src/api/system/oss.js @@ -9,23 +9,6 @@ export function listOss(query) { }) } -// 上传OSS云存储 -export function addOss(data) { - return request({ - url: '/system/oss/upload', - method: 'post', - data: data - }) -} - -// 下载OSS云存储 -export function downloadOss(ossId) { - return request({ - url: '/system/oss/download/' + ossId, - method: 'get' - }) -} - // 删除OSS云存储 export function delOss(ossId) { return request({ diff --git a/ruoyi-ui/src/components/Editor/index.vue b/ruoyi-ui/src/components/Editor/index.vue index f78dfcc5..b2ea1527 100644 --- a/ruoyi-ui/src/components/Editor/index.vue +++ b/ruoyi-ui/src/components/Editor/index.vue @@ -54,7 +54,7 @@ export default { }, data() { return { - uploadUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址 + uploadUrl: process.env.VUE_APP_BASE_API + "/system/oss/upload", // 上传的图片服务器地址 headers: { Authorization: "Bearer " + getToken() }, diff --git a/ruoyi-ui/src/components/FileUpload/index.vue b/ruoyi-ui/src/components/FileUpload/index.vue index d47fb98f..244ac289 100644 --- a/ruoyi-ui/src/components/FileUpload/index.vue +++ b/ruoyi-ui/src/components/FileUpload/index.vue @@ -27,7 +27,7 @@
  • - + {{ getFileName(file.name) }}
    @@ -70,7 +70,7 @@ export default { data() { return { baseUrl: process.env.VUE_APP_BASE_API, - uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址 + uploadFileUrl: process.env.VUE_APP_BASE_API + "/system/oss/upload", // 上传的图片服务器地址 headers: { Authorization: "Bearer " + getToken(), }, diff --git a/ruoyi-ui/src/components/ImageUpload/index.vue b/ruoyi-ui/src/components/ImageUpload/index.vue index 31940af2..e074b381 100644 --- a/ruoyi-ui/src/components/ImageUpload/index.vue +++ b/ruoyi-ui/src/components/ImageUpload/index.vue @@ -74,7 +74,7 @@ export default { dialogVisible: false, hideUpload: false, baseUrl: process.env.VUE_APP_BASE_API, - uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址 + uploadImgUrl: process.env.VUE_APP_BASE_API + "/system/oss/upload", // 上传的图片服务器地址 headers: { Authorization: "Bearer " + getToken(), }, @@ -90,11 +90,7 @@ export default { // 然后将数组转为对象数组 this.fileList = list.map(item => { if (typeof item === "string") { - if (item.indexOf(this.baseUrl) === -1) { - item = { name: this.baseUrl + item, url: this.baseUrl + item }; - } else { - item = { name: item, url: item }; - } + item = { name: item, url: item }; } return item; }); @@ -122,7 +118,7 @@ export default { }, // 上传成功回调 handleUploadSuccess(res) { - this.fileList.push({ name: res.data.fileName, url: res.data.fileName }); + this.fileList.push({ name: res.data.fileName, url: res.data.url }); this.$emit("input", this.listToString(this.fileList)); this.loading.close(); }, diff --git a/ruoyi-ui/src/utils/ossdownload.js b/ruoyi-ui/src/utils/ossdownload.js new file mode 100644 index 00000000..e212ca8a --- /dev/null +++ b/ruoyi-ui/src/utils/ossdownload.js @@ -0,0 +1,33 @@ +import axios from 'axios' +import { getToken } from '@/utils/auth' + +const mimeMap = { + oss: 'application/octet-stream' +} + +const baseUrl = process.env.VUE_APP_BASE_API +export function downLoadOss(ossId, filename) { + var url = baseUrl + '/system/oss/download/' + ossId + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then(res => { + resolveBlob(res, mimeMap.oss, filename) + }) +} +/** + * 解析blob响应内容并下载 + * @param {*} res blob响应内容 + * @param {String} mimeType MIME类型 + */ +export function resolveBlob(res, mimeType, filename) { + const aLink = document.createElement('a') + var blob = new Blob([res.data], { type: mimeType }) + aLink.href = URL.createObjectURL(blob) + aLink.setAttribute('download', filename) // 设置下载文件名称 + document.body.appendChild(aLink) + aLink.click() + document.body.removeChild(aLink); +} diff --git a/ruoyi-ui/src/views/system/oss/index.vue b/ruoyi-ui/src/views/system/oss/index.vue index 0ad14cbc..12bc5d36 100644 --- a/ruoyi-ui/src/views/system/oss/index.vue +++ b/ruoyi-ui/src/views/system/oss/index.vue @@ -71,9 +71,19 @@ plain icon="el-icon-plus" size="mini" - @click="handleAdd" + @click="handleFile" v-hasPermi="['system:oss:upload']" - >上传 + >上传文件 + + + 上传图片 - - + + + +