ViYaYaYa / gist

gist的入口太隐蔽了,以后在这里写!
0 stars 0 forks source link

通过Axios上传文件,并计算图像大小的方法 #9

Open ViYaYaYa opened 6 years ago

ViYaYaYa commented 6 years ago
import Api from 'src/utils/api'

export default async function uploader(files) {
  files = Array.prototype.slice.call(files)
  const data = new FormData()
  for (let i = 0; i < files.length; i++) {
    data.append('files', files[i])
  }
  let { data: res } = await Api.post('/cloudStoreOp/uploadPic', data, {
    _RES_ORIGIN: true,
    _REQ_LOADING: true,
    headers: {
      'content-type': 'multipart/form-data'
    }
  })
  if (res && res.length) {
    const output = []
    const dimensionParsers = []
    function parserGenerator(url) {
      return new Promise(resolve => {
        const img = document.createElement('img')
        const dimension = {
          width: '',
          height: ''
        }
        img.onload = () => {
          dimension.width = img.width
          dimension.height = img.height
          resolve(dimension)
        }
        img.onerror = () => {
          resolve(dimension)
        }
        img.src = url
      })
    }
    res.forEach((file, i) => {
      if (file && file.data) {
        const data = file.data
        const obj = {
          file: files[i],
          url: data['picUrl'],
          md5: data['fileMD5'],
          width: '',
          height: ''
        }
        output.push(obj)
        dimensionParsers.push(parserGenerator(data['picUrl']).then(dimension => {
          obj.width = dimension.width
          obj.height = dimension.height
        }))
      }
    })
    const loadingHider = window._utils.message.loading()
    await Promise.all(dimensionParsers)
    loadingHider()
    return output
  } else {
    return Promise.reject(res)
  }
}