使用 axios 上传媒体文件

一、FormData

XHR 2 添加了一个新的接口 FormData,通过 FormData 对象里面的键值对可以模拟表单控件异步上传二进制文件。

append() 方法会添加一个新值到 FormData 对象内,若已存在也不会覆盖,可用 getAll() 方法取到指定键的所有值。delete() 方法会从 FormData 对象中删除指定键和它所有对应的值。

示例:

const fd = new FormData()
// append
fd.append('age', '24')
fd.append('name', 'Mazey')
fd.append('name', 'Cherrie')
console.log(fd.get('name')) // Mazey
console.log(fd.getAll('name')) // ["Mazey", "Cherrie"]
// delete
fd.delete('name')
console.log(fd.getAll('name')) // []

也可以指定一个 BlobFile 作为数据添加到 FormData 对象中:fd.append('file', Blob Object, File Name)fd.append('portrait', formInput.files[0], 'user.png')

二、Blob

Blob 对象表示一个不可变、原始数据的类文件对象。通过 URL 对象可以创建一个指向类型化数组的 URL,可以当成一个普通的链接使用,比如读取图片或者视频。

示例:

const blob = new Blob([JSON.stringify({hello: 'Mazey!'})], {type : 'application/json'})
const url = URL.createObjectURL(blob)

三、实战:使用 axios 上传一个 WebM 文件

备注:WebM 由 Google 提出,是一个开放、免费的媒体文件格式。

const blob = new Blob(Webm Object, {type: 'video/webm'})
const formData = new FormData()
formData.append('file', blob, 'mazey-test.webm')
axios({
    method: 'post',
    url: '/api/video/upload',
    data: formData,
    headers: {
        'Content-Type': 'multipart/form-data'
    }
})
    .then(
        res => {
            console.log('上传成功!')
        }
    )
    .catch(
        err => {
            console.log('上传失败!')
        }
    )
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock阅读 3,401评论 2 36
  • 写分析报告之前,首先你要明确这份分析写给谁看。报告阅读对象不同,报告的写作也应因人而异。比如,提供给财务部领导可以...
    吕琴厚阅读 615评论 0 1
  • 第一次吃泡面是在一个下午。在一条很大的船上。 妈妈拿出一袋方便面和两只蓝边的粗瓷碗,那种面很细,包装也单薄,只有一...
    森林小叶儿阅读 219评论 1 1