update 上传组件小改,配置

master
管理员 1 year ago
parent 8de5f162cd
commit bff4d692e5

@ -55,7 +55,7 @@ const props = defineProps({
getUploadKey: {
type: Function,
default: async () => {
let r = await request.get("/file/upload/getUploadKey")
let r = await request.get("/uploadKey")
return r.data
}
},
@ -427,7 +427,7 @@ const uploadChunk = async (one, chunksList, index, uploadId, retry = 0) => {
one.uploading.loaded = props.chunksize * index + event.loaded
}
try {
let r = await request.post(base + "multipartUpload?r="+index+''+ Math.random(), formData, {
let r = await request.post(base + "multipartUpload?r=" + index + '' + Math.random(), formData, {
onUploadProgress,
timeout: 600000,
showLoading: false,
@ -545,6 +545,8 @@ defineExpose({ open, reloadUploadKey })
background-position: -14em center;
font-size: .4em;
margin-right: .5em;
flex-flow: 1;
flex-shrink: 1;
&.icon-dir {
background-position: 0 center;

@ -6,7 +6,7 @@
</div>
<input ref="fileInputRef" v-if="!props.disabled" accept="image/*" @change="fileInputChange" type="file"
style="position: absolute; top:-100vh;" :multiple="props.max != 1" />
<div class="list">
<div class="list" :class="{ noEffect: props.noEffect }">
<slot :list="data">
<div v-for="(item, index) in data" :key="index" class="item" :class="{ error: item.error, abort: item.abort }"
:style="{ '--ps': item.uploading ? (item.uploading?.loaded || 0) * 100 / (item.uploading?.total || 1) + '%' : '100%' }"
@ -55,7 +55,7 @@
</div>
</template>
<script setup>
import { ref, onMounted, onUnmounted, computed, getCurrentInstance } from 'vue'
import { ref, onMounted, onUnmounted, computed, getCurrentInstance, watch } from 'vue'
import { request } from '@/utils'
import { ElMessage } from 'element-plus'
@ -95,7 +95,7 @@ const props = defineProps({
getUploadKey: {
type: Function,
default: async () => {
let r = await request.get("/file/upload/getUploadKey")
let r = await request.get("/uploadKey")
return r.data
}
},
@ -157,6 +157,10 @@ const props = defineProps({
watermark: {
type: Boolean,
default: true
},
noEffect: {
type: Boolean,
default: false
}
@ -217,6 +221,20 @@ onMounted(async () => {
console.debug(proxy.$refs.imgRef)
})
watch(mv, () => {
if (props.max == 1) {
data.value = []
if (mv.value) {
data.value = [{ url: mv.value }]
}
} else {
data.value = []
if (mv.value) {
data.value = mv.value.map(a => ({ url: a }))
}
}
})
const remove = (one) => {
data.value.splice(data.value.indexOf(one), 1)
if (props.max == 1) {
@ -422,6 +440,14 @@ defineExpose({ open, reloadUploadKey })
display: flex;
flex-wrap: wrap;
&.noEffect {
--image-border-radius: 0;
--image-margin: 0;
--image-border: none;
--image-box-shadow: none;
}
.item {
width: var(--image-size, 10em);
@ -429,16 +455,15 @@ defineExpose({ open, reloadUploadKey })
position: relative;
overflow: hidden;
border-radius: .4em;
margin-top: .5em;
margin-right: .5em;
border-radius: var(--image-border-radius, .4em);
margin: var(--image-margin, .5em .5em 0 0);
padding: 0;
border: #FFF solid 2px;
box-shadow: 0 0 .2em #0005;
border: var(--image-border, #FFF solid 2px);
box-shadow: var(--image-box-shadow, 0 0 .2em #0005);
cursor: pointer;
img {
object-fit: cover;
object-fit: var(--image-fit, cover);
width: 100%;
height: 100%;
object-position: center;

@ -5,34 +5,33 @@ import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.file.FileService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.Duration;
@RequiredArgsConstructor
@RestController
@RequestMapping("/")
public class UploadController {
private final FileService fileService;
@GetMapping("/uploadKey")
public R uploadKey() {
return R.ok().setData(FileUtils.getUploadKey());
}
@Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R upload(@RequestPart("file") MultipartFile file, String pre) {
if (ObjectUtil.isNull(file)) {
throw new ServiceException("文件为空");
}
// return R.ok(iSysOssService.upload(file, pre));
return R.ok(fileService.setPrefix(pre).save(file));//TODO: fileService
return R.map().put("ossId", 0).put("url", fileService.setPrefix(pre).setKeepFilename().save(file));
}
@Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
@ -44,24 +43,7 @@ public class UploadController {
if (!file.getContentType().startsWith("image/")) {
throw new ServiceException("不是图片");
}
// return R.ok(iSysOssService.uploadImgs(file, pre));
return R.ok(fileService.setPrefix(pre).setThumbnail().saveImage(file));//TODO: fileService
return R.map().put("ossId", 0).put("url", fileService.setPrefix(pre).setSize().setWatermark().setThumbnail().saveImage(file));
}
/**
*
*
* @param url
* @param request
* @param response
* @throws IOException
*/
@PostMapping("/download")
public ModelAndView download(String url, HttpServletRequest request, HttpServletResponse response) {
// iSysOssService.download(ossId, response);
fileService.download(url, Duration.ofMinutes(30), request, response);//TODO: fileService
return null;
}
}

@ -0,0 +1,96 @@
package com.ruoyi;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class FinalShellDecodePass {
public static void main(String[] args) throws Exception {
System.out.print(decodePassword("PjQxIS8pKi8fi8SeNbQtP1s3JUn5XPNs"));
}
public static byte[] decryptDes(byte[] data, byte[] key) throws Exception {
SecureRandom secureRandom = new SecureRandom();
DESKeySpec desKeySpec = new DESKeySpec(key);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, secretKey, secureRandom);
return cipher.doFinal(data);
}
public static String decodePassword(String data) throws Exception {
if (data == null) {
return null;
} else {
byte[] decodedData = Base64.getDecoder().decode(data);
byte[] head = new byte[8];
System.arraycopy(decodedData, 0, head, 0, head.length);
byte[] encryptedData = new byte[decodedData.length - head.length];
System.arraycopy(decodedData, head.length, encryptedData, 0, encryptedData.length);
byte[] decryptedData = decryptDes(encryptedData, generateRandomKey(head));
return new String(decryptedData);
}
}
static byte[] generateRandomKey(byte[] head) {
long seed = 3680984568597093857L / (long) (new Random((long) head[5])).nextInt(127);
Random random = new Random(seed);
int t = head[0];
for (int i = 0; i < t; ++i) {
random.nextLong();
}
long n = random.nextLong();
Random random2 = new Random(n);
long[] keyData = {(long) head[4], random2.nextLong(), (long) head[7], (long) head[3], random2.nextLong(),
(long) head[1], random.nextLong(), (long) head[2]};
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
for (long l : keyData) {
try {
dos.writeLong(l);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
byte[] key = bos.toByteArray();
return md5Hash(key);
}
public static byte[] md5Hash(byte[] data) {
try {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(data, 0, data.length);
byte[] result = messageDigest.digest();
return result;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
}

@ -136,7 +136,7 @@ services:
- ./server1/log/:/server/logs/:rw
- ./server1/config/:/server/config/:rw
- ./server1/tmp/:/server/tmp/:rw
- ./server1/upload/:/server/upload/:rw
- ./nginx/html/upload/:/server/upload/:rw
privileged: true
networks:
- base2024-network

@ -116,26 +116,6 @@ http {
proxy_pass http://minio/files/;
}
# 反向代理upload目录本地文件上传不支持分布式
location /upload/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
set $static_fileLNaRCRJo 0;
if ( $uri ~* "\.(gif|png|jpg|webp|css|js|woff|woff2)$" )
{
set $static_fileLNaRCRJo 1;
expires 1m;
}
if ( $static_fileLNaRCRJo = 0 )
{
add_header Cache-Control no-cache;
}
proxy_pass http://server/upload/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {

Loading…
Cancel
Save