Browse Source

download files can be paused

pull/208/head
cKey 5 years ago
parent
commit
d35e010faf
  1. 1
      vueJs/src/icons/components/index.ts
  2. 12
      vueJs/src/icons/components/pause.ts
  3. 1
      vueJs/src/icons/svg/pause.svg
  4. 86
      vueJs/src/views/file-management/components/FileDownloadForm.vue

1
vueJs/src/icons/components/index.ts

@ -52,6 +52,7 @@ import './money'
import './nested'
import './organization-unit'
import './password'
import './pause'
import './pdf'
import './people'
import './peoples'

12
vueJs/src/icons/components/pause.ts

@ -0,0 +1,12 @@
/* eslint-disable */
/* tslint:disable */
// @ts-ignore
import icon from 'vue-svgicon'
icon.register({
'pause': {
width: 64,
height: 64,
viewBox: '0 0 1024 1024',
data: '<path pid="0" _fill="#333" d="M688.64 168.96c-40.96 0-74.24 35.84-74.24 74.24v552.96c0 40.96 35.84 74.24 74.24 74.24s74.24-35.84 74.24-74.24V243.2c0-40.96-35.84-74.24-74.24-74.24zm-353.28 0c-40.96 0-74.24 35.84-74.24 74.24v552.96c0 40.96 35.84 74.24 74.24 74.24s74.24-35.84 74.24-74.24V243.2c2.56-40.96-33.28-74.24-74.24-74.24z"/>'
}
})

1
vueJs/src/icons/svg/pause.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="64px" height="64.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#333333" d="M688.64 168.96c-40.96 0-74.24 35.84-74.24 74.24v552.96c0 40.96 35.84 74.24 74.24 74.24s74.24-35.84 74.24-74.24V243.2c0-40.96-35.84-74.24-74.24-74.24z m-353.28 0c-40.96 0-74.24 35.84-74.24 74.24v552.96c0 40.96 35.84 74.24 74.24 74.24s74.24-35.84 74.24-74.24V243.2c2.56-40.96-33.28-74.24-74.24-74.24z" /></svg>

After

Width:  |  Height:  |  Size: 588 B

86
vueJs/src/views/file-management/components/FileDownloadForm.vue

@ -45,18 +45,22 @@
type="success"
icon="el-icon-caret-right"
:disabled="row.downloading"
@click="handleDownloadFile(row)"
@click="handleDownload(row)"
/>
<el-button
size="mini"
type="info"
:disabled="row.pause"
@click="handlePause(row)"
>
{{ $t('fileSystem.begin') }}
<svg-icon name="pause" />
</el-button>
<el-button
size="mini"
type="danger"
icon="el-icon-delete"
@click="handleRemoveFile(row)"
>
{{ $t('fileSystem.remove') }}
</el-button>
@click="handleRemove(row)"
/>
</template>
</el-table-column>
</el-table>
@ -72,7 +76,7 @@ export class FileInfo {
path!: string
size!: number
progress!: number
pause!: boolean
pause = true
blobs = new Array<BlobPart>()
type!: string
downloading!: boolean
@ -106,49 +110,51 @@ export default class FileDownloadForm extends Vue {
}
}
private handleRemoveFile(fileInfo: FileInfo) {
private handlePause(fileInfo: FileInfo) {
fileInfo.pause = true
fileInfo.downloading = false
this.$emit('onFilePaused', fileInfo)
}
private handleRemove(fileInfo: FileInfo) {
fileInfo.pause = true
fileInfo.downloading = false
fileInfo.blobs.length = 0
this.$emit('onFileRemoved', fileInfo)
}
private handleDownloadFile(fileInfo: FileInfo) {
fileInfo.pause = false
fileInfo.downloading = true
if (fileInfo.progress >= 100) {
this.downloadBlob(fileInfo)
} else {
this.downlodFile(fileInfo, (downloadSize: number) => {
if (downloadSize >= fileInfo.size) {
this.$emit('onFileDownloaded', fileInfo)
}
})
private handleDownload(fileInfo: FileInfo) {
if (!fileInfo.downloading) {
fileInfo.pause = false
fileInfo.downloading = true
if (this.downloadProgress(fileInfo) >= 100) {
this.downloadBlob(fileInfo)
} else {
this.downlodFile(fileInfo)
}
}
}
private downlodFile(fileInfo: FileInfo, callback: Function) {
private downlodFile(fileInfo: FileInfo) {
if (fileInfo.pause) {
return
}
FileSystemService.downlodFle(fileInfo.name, fileInfo.path, fileInfo.progress).then((res: any) => {
fileInfo.type = res.headers['content-type']
//
const downloadByte = res.data.size
//
fileInfo.blobs.push(res.data)
fileInfo.progress += downloadByte
if (fileInfo.size > fileInfo.progress) {
this.downlodFile(fileInfo, callback)
} else {
//
this.downloadBlob(fileInfo)
//
callback(fileInfo.size)
}
}).catch(() => {
callback(fileInfo.size)
})
FileSystemService
.downlodFle(fileInfo.name, fileInfo.path, fileInfo.progress)
.then((res: any) => {
fileInfo.type = res.headers['content-type']
//
const downloadByte = res.data.size
//
fileInfo.blobs.push(res.data)
fileInfo.progress += downloadByte
if (fileInfo.size > fileInfo.progress) {
this.downlodFile(fileInfo)
} else {
//
this.downloadBlob(fileInfo)
}
})
}
private downloadBlob(fileInfo: FileInfo) {
@ -160,6 +166,10 @@ export default class FileDownloadForm extends Vue {
document.body.appendChild(link)
link.click()
URL.revokeObjectURL(url)
fileInfo.pause = true
fileInfo.downloading = false
this.$emit('onFileDownloaded', fileInfo)
}
private onFormClosed() {

Loading…
Cancel
Save