Upload.vue 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <a-form-item :label="$t('compute.text_244')">
  3. <a-upload
  4. name="files"
  5. :fileList="fileList"
  6. :multiple="true"
  7. :remove="handleRemove"
  8. :beforeUpload="beforeUpload">
  9. <a-button> <a-icon type="upload" />{{$t('compute.text_245')}}</a-button>
  10. </a-upload>
  11. <span slot="extra" :class="err ? 'error-color' : 'text-color-help'">{{$t('compute.text_246')}}</span>
  12. </a-form-item>
  13. </template>
  14. <script>
  15. export default {
  16. name: 'AnsibleTemplateUpload',
  17. inject: ['form'],
  18. props: ['defaultFiles'],
  19. data () {
  20. return {
  21. fileList: [],
  22. files: {},
  23. err: false,
  24. }
  25. },
  26. watch: {
  27. files (newFiles) {
  28. this.form.setFieldsValue({
  29. files: newFiles,
  30. })
  31. },
  32. fileList (newFileList) {
  33. this.setFiles(newFileList)
  34. },
  35. defaultFiles (fileBuffers) {
  36. if (fileBuffers) {
  37. Object.keys(fileBuffers).forEach((key, index) => {
  38. const buffer = new Uint8Array(fileBuffers[key]).buffer
  39. const blob = new Blob([buffer])
  40. const file = new File([blob], key)
  41. // file['name'] = key
  42. file.uid = index
  43. // const elink = document.createElement('a')
  44. // elink.download = key
  45. // elink.style.display = 'none'
  46. // elink.target = '_blankv'
  47. // elink.href = URL.createObjectURL(blob)
  48. // document.body.appendChild(elink)
  49. // elink.click()
  50. // document.body.removeChild(elink)
  51. // console.log(file)
  52. this.fileList.push(file)
  53. })
  54. }
  55. },
  56. },
  57. created () {
  58. this.form.getFieldDecorator('files', { preserve: true, initialValue: {} })
  59. },
  60. methods: {
  61. validateSize (filelist) {
  62. if (!filelist || filelist.length === 0) {
  63. return true
  64. }
  65. const MAX_KB = 64
  66. const filesSize = filelist.length === 1 ? filelist[0].size : filelist.reduce((x, y) => {
  67. return x.size + y.size
  68. })
  69. if (Math.ceil(parseFloat(filesSize) / 1024) > MAX_KB) {
  70. return false
  71. }
  72. return true
  73. },
  74. beforeUpload (file, filelist) {
  75. this.err = !this.validateSize(filelist.concat(this.fileList))
  76. this.fileList.push(file)
  77. return false
  78. },
  79. handleRemove (file) {
  80. this.fileList = this.fileList.filter(item => {
  81. return file.uid !== item.uid
  82. })
  83. this.err = !this.validateSize(this.fileList)
  84. return true
  85. },
  86. setFiles (filelist = this.filelist) {
  87. this.files = {}
  88. filelist.forEach(async file => {
  89. const { name } = file
  90. const buffer = await file.arrayBuffer()
  91. const uint8Array = new Uint8Array(buffer)
  92. this.files[name] = Object.values(uint8Array)
  93. })
  94. },
  95. },
  96. }
  97. </script>