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

Loading…
Cancel
Save