Browse Source

大文件上传获取重复

master
xuhuajiao 4 months ago
parent
commit
c84f87f305
  1. 3
      src/views/collectReorganizi/collectionLibrary/module/collectHeader.vue
  2. 90
      src/views/collectReorganizi/collectionLibrary/module/uploadOriginal/bigUpload.vue
  3. 5
      src/views/collectReorganizi/collectionLibrary/module/uploadOriginal/index.vue

3
src/views/collectReorganizi/collectionLibrary/module/collectHeader.vue

@ -178,7 +178,8 @@
</div>
</div>
<div slot="footer" class="dialog-footer" style="margin-top: 85px !important;">
<el-button v-if="(isTitleType === 3 && selectedCategory.arrangeType === 1) || isTitleType === 4 || isTitleType === 6 || (isTitleType === 3 && activeIndex === 1)" type="primary" style="width: 84px;" @click="handleAiCategory">AI辅助著录</el-button>
<el-button type="text" style="width: 140px; border-color: #0348f3; color: #0348f3;">保存并新增下一条</el-button>
<el-button v-if="(isTitleType === 3 && selectedCategory.arrangeType === 1) || isTitleType === 4 || isTitleType === 6 || (isTitleType === 3 && activeIndex === 1)" type="text" style="width: 84px; border-color: #0348f3; color: #0348f3; " @click="handleAiCategory">AI辅助著录</el-button>
<el-button type="primary" @click="handlerArchivesSubmit">保存</el-button>
</div>
</div>

90
src/views/collectReorganizi/collectionLibrary/module/uploadOriginal/bigUpload.vue

@ -1,4 +1,5 @@
<template>
<div>
<!--上传组件-->
<el-dialog class="big-file" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body :visible.sync="uploadBigVisible">
<template #title>
@ -53,9 +54,27 @@
</div>
</div>
</el-dialog>
<!-- 判断是否有重复上传的文件 -->
<el-dialog class="collectUpload-dialog" title="文件上传" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body :visible.sync="repeatFileVisible">
<div class="setting-dialog">
<p style="color:#f00;margin-bottom: 20px;display:block">提示以下所选文件在当前档案文件列表已存在</p>
<div v-for="item in repeatFileData" :key="item.name" class="file-list" style="margin-bottom: 10px;">
<i class="iconfont icon-xiaowenjian" />
{{ item.name }}
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleRepeatFile(0)">直接上传</el-button>
<el-button style="width: 85px;" type="primary" @click="handleRepeatFile(1)">去重后上传</el-button>
<el-button type="text" @click="repeatFileVisible = false">取消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { FetchInitFileCategoryView } from '@/api/collect/collect'
import { mapGetters } from 'vuex'
import axios from 'axios'
import SparkMD5 from 'spark-md5'
@ -125,7 +144,11 @@ export default {
},
fileList: [],
nowDate: null,
submitted: false
submitted: false,
//
repeatFileVisible: false,
repeatFileData: [],
originFileData: []
}
},
computed: {
@ -137,6 +160,16 @@ export default {
this.options.target = this.baseApi + '/api/collect/upload'
},
methods: {
//
getFileList() {
const params = {
'categoryId': this.selectedCategory.id,
'archivesId': this.arcId
}
return FetchInitFileCategoryView(params).then(data => {
this.originFileData = data.returnlist
})
},
fileSuccess(rootFile, file, response, chunk) {
this.chunkOffset = []
const result = JSON.parse(response)
@ -235,10 +268,47 @@ export default {
onFileError(rootFile, file, message, chunk) {
this.$message({ message: '上传出错:' + message, type: 'error', offset: 8 })
},
filesAdded(file, fileList, event) {
handleRepeatFileCancel() {
this.repeatFileVisible = false
this.repeatFileData = []
this.originFileData = []
const uploaderInstance = this.$refs.uploader.uploader
uploaderInstance.fileList[0].cancel()
},
handleRepeatFile(type) {
if (type === 0) {
//
this.computeMD5(this.fileList[0])
} else {
//
const nonRepeatFileData = this.fileList.filter(file => !this.repeatFileData.some(repeatFile => repeatFile.name === file.name))
if (nonRepeatFileData.length === 0) {
this.$message({ message: '当前所选文件去重后无可上传的文件', type: 'error', offset: 8 })
this.handleRepeatFileCancel()
this.handleCloseDialog()
} else {
this.computeMD5(this.fileList)
}
}
this.repeatFileVisible = false
},
async filesAdded(file, fileList, event) {
this.fileList = []
//
await this.getFileList()
file.forEach((e) => {
this.fileList.push(e)
const existingFileNames = this.originFileData.map(file => file.file_name)
this.repeatFileData = this.fileList.filter(file => existingFileNames.includes(file.name))
console.log('filteredFileList', this.repeatFileData)
if (this.repeatFileData.length === 0) {
this.computeMD5(e)
} else {
this.repeatFileVisible = true
}
})
},
computeMD5(file) {
@ -248,6 +318,7 @@ export default {
this.$message.warning(maxMessage)
return false
}
const fileReader = new FileReader()
const time = new Date().getTime()
const blobSlice =
@ -262,6 +333,14 @@ export default {
// "MD5"
file.cmd5 = true
file.pause()
// loadNext
const loadNext = () => {
const start = currentChunk * chunkSize
const end = start + chunkSize >= file.size ? file.size : start + chunkSize
fileReader.readAsArrayBuffer(blobSlice.call(file.file, start, end))
}
loadNext()
fileReader.onload = (e) => {
spark.append(e.target.result)
@ -291,11 +370,6 @@ export default {
this.error(`文件${file.name}读取出错,请检查该文件`)
file.cancel()
}
function loadNext() {
const start = currentChunk * chunkSize
const end = start + chunkSize >= file.size ? file.size : start + chunkSize
fileReader.readAsArrayBuffer(blobSlice.call(file.file, start, end))
}
},
// base64
getBase64(file) {
@ -322,6 +396,8 @@ export default {
handleCloseDialog(done) {
this.uploadBigVisible = false
this.fileList = []
const uploaderInstance = this.$refs.uploader.uploader
uploaderInstance.fileList[0].cancel()
}
}
}

5
src/views/collectReorganizi/collectionLibrary/module/uploadOriginal/index.vue

@ -207,8 +207,13 @@ export default {
} else {
//
const nonRepeatFileData = this.fileList.filter(file => !this.repeatFileData.some(repeatFile => repeatFile.name === file.name))
if (nonRepeatFileData.length === 0) {
this.$message({ message: '当前所选文件去重后无可上传的文件', type: 'error', offset: 8 })
this.handleRepeatFileCancel()
} else {
this.uplaodToList(nonRepeatFileData)
}
}
this.repeatFileVisible = false
},
handleRepeatFileCancel() {

Loading…
Cancel
Save