提交 ff0087a3 authored 作者: 王鹏飞's avatar 王鹏飞

chore: add local

上级 c25d7120
......@@ -4,7 +4,7 @@
"type": "module",
"scripts": {
"dev": "vite --mode dev",
"build": "vue-tsc --noEmit && vite build --mode prod && npm run deploy",
"build": "vue-tsc --noEmit && vite build --mode prod",
"build:test": "vue-tsc --noEmit && vite build --mode test",
"build:pre": "vue-tsc --noEmit && vite build --mode pre",
"preview": "vite preview --port 4173",
......
......@@ -62,3 +62,22 @@ export function getProjectList(params: { organization_id?: string; project_id?:
export function getQuestionCategory(params: { project_tag: string }) {
return httpRequest.get(`/api/qbs/admin/v2/question-category/tree/${params.project_tag}`, { params })
}
// 获取分片大小和唯一文件名
export function getLocalFileChunk(params: { file_size: number; file_name: string }) {
return httpRequest.get('/api/lab/v1/common/file/chunk', { params })
}
// 上传每个分片前请求接口来获取当前文件是否超时,之前的分片是否被清理,如果被请求则拒绝处理。返回客户端错误码,让客户端户端不再续传剩余分片
// 1文件被清理 0文件未被清理
export function checkLocalFile(params: { file_name: string }) {
return httpRequest.get('/api/lab/v1/common/file/check', { params })
}
// 上传文件
export function uploadLocalFile(data: { file: File; file_name: string; is_continuingly?: number; now_package_num: number; total_package_num: number }) {
return httpRequest.post('/api/lab/v1/common/file/upload', data, {
withCredentials: false,
headers: { 'Content-Type': 'multipart/form-data' }
})
}
......@@ -2,8 +2,8 @@
import { ElMessage } from 'element-plus'
import { Plus } from '@element-plus/icons-vue'
import type { UploadProps, UploadUserFile } from 'element-plus'
import md5 from 'blueimp-md5'
import { getSignature } from '@/api/base'
// import md5 from 'blueimp-md5'
import { getLocalFileChunk } from '@/api/base'
const props = withDefaults(
defineProps<{
......@@ -37,19 +37,12 @@ const showFileList = computed(() => {
// 上传之前
const handleBeforeUpload = async (file: any) => {
const fileName = file.name
const key = props.prefix + md5(fileName + new Date().getTime()) + '/' + fileName
const response: Record<string, any> = await getSignature()
const response: Record<string, any> = await getLocalFileChunk({ file_name: file.name, file_size: file.size })
uploadData.value = {
key,
host: response.host,
OSSAccessKeyId: response.accessid,
policy: response.policy,
signature: response.signature,
success_action_status: '200',
url: `${response.host}/${key}`
file_name: response.data.detail.file_name,
now_package_num: 1,
total_package_num: 1
}
file.url = `${response.host}/${key}`
if (props.beforeUploadFiles) {
return props.beforeUploadFiles(file)
}
......@@ -57,6 +50,7 @@ const handleBeforeUpload = async (file: any) => {
// 上传成功
const handleSuccess: UploadProps['onSuccess'] = (response, file: any, files: any) => {
file.url = response.data.detail.uri
if (!files.every((item: any) => item.status === 'success')) return
if (showFileList.value) {
emit(
......@@ -71,7 +65,7 @@ const handleSuccess: UploadProps['onSuccess'] = (response, file: any, files: any
})
)
} else {
emit('update:modelValue', file.raw.url)
emit('update:modelValue', response.data.detail.uri)
}
}
......@@ -102,7 +96,7 @@ const handlePreview: UploadProps['onPreview'] = uploadFile => {
<template>
<el-upload
:action="uploadData?.host"
action="/api/lab/v1/common/file/upload"
:data="uploadData"
:show-file-list="showFileList"
:before-upload="handleBeforeUpload"
......
<script setup lang="ts">
import Editor from '@tinymce/tinymce-vue'
import md5 from 'blueimp-md5'
import { getSignature, uploadFile } from '@/api/base'
import { getLocalFileChunk, uploadLocalFile } from '@/api/base'
const props = defineProps({
height: {
type: Number,
default: 600
default: 400
}
})
const ImageUploadHandler = (blobInfo: any) =>
new Promise((resolve, reject) => {
const file = blobInfo.blob()
getSignature()
getLocalFileChunk({ file_name: file.name, file_size: file.size })
.then((response: any) => {
const prefix = 'upload/admin/'
const key = prefix + md5(file.name + new Date().getTime()) + file.name.substr(file.name.lastIndexOf('.'))
const { accessid, policy, signature, host } = response
const params = {
key,
host,
OSSAccessKeyId: accessid,
policy,
signature,
success_action_status: '200',
file,
url: `${host}/${key}`
file_name: response.data.detail.file_name,
now_package_num: 1,
total_package_num: 1
}
uploadFile(params)
uploadLocalFile(params)
.then((res: any) => {
resolve(res.url)
resolve(res.data.detail.uri)
})
.catch(() => {
reject('上传失败')
})
})
.catch(() => {
reject('获取Signature失败')
reject('上传失败')
})
})
......
......@@ -2,8 +2,8 @@
import { ElMessage } from 'element-plus'
// import { Plus } from '@element-plus/icons-vue'
import type { UploadProps, UploadUserFile } from 'element-plus'
import md5 from 'blueimp-md5'
import { getSignature } from '@/api/base'
// import md5 from 'blueimp-md5'
import { getLocalFileChunk } from '@/api/base'
const props = withDefaults(defineProps<{ modelValue: string | []; prefix?: string }>(), {
prefix: 'upload/admin/'
......@@ -27,23 +27,17 @@ const showFileList = computed(() => {
// 上传之前
const handleBeforeUpload = async (file: any) => {
const fileName = file.name
const key = props.prefix + md5(fileName + new Date().getTime()) + fileName.substr(fileName.lastIndexOf('.'))
const response: Record<string, any> = await getSignature()
const response: Record<string, any> = await getLocalFileChunk({ file_name: file.name, file_size: file.size })
uploadData.value = {
key,
host: response.host,
OSSAccessKeyId: response.accessid,
policy: response.policy,
signature: response.signature,
success_action_status: '200',
url: `${response.host}/${key}`
file_name: response.data.detail.file_name,
now_package_num: 1,
total_package_num: 1
}
file.url = `${response.host}/${key}`
}
// 上传成功
const handleSuccess = (response: any, file: any, files: any) => {
file.url = response.data.detail.uri
if (!files.every((item: any) => item.status === 'success')) return
if (showFileList.value) {
emit(
......@@ -53,7 +47,7 @@ const handleSuccess = (response: any, file: any, files: any) => {
})
)
} else {
emit('update:modelValue', file.raw.url)
emit('update:modelValue', response.data.detail.uri)
}
}
......@@ -80,7 +74,7 @@ const handlePreview: UploadProps['onPreview'] = uploadFile => {
<template>
<el-upload
:action="uploadData?.host"
action="/api/lab/v1/common/file/upload"
:data="uploadData"
:show-file-list="false"
:before-upload="handleBeforeUpload"
......
......@@ -7,8 +7,8 @@ import vue from '@vitejs/plugin-vue'
// import checker from 'vite-plugin-checker'
import AutoImport from 'unplugin-auto-import/vite'
export default defineConfig(({ mode }) => ({
base: mode === 'prod' ? 'https://webapp-pub.ezijing.com/website/prod/center-resource/' : '/',
export default defineConfig(() => ({
// base: mode === 'prod' ? 'https://webapp-pub.ezijing.com/website/prod/center-resource/' : '/',
plugins: [
vue({ reactivityTransform: true }),
AutoImport({
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论