uniapp上传文件后缀名丢失

文章讲述了在uniapp中遇到H5录音功能不支持并导致上传文件时丢失后缀名的问题。作者决定绕过uniapp的API,使用fetch方法自定义上传功能。通过创建Blob对象,转换为File对象,并添加到FormData中,成功上传了mp3文件。对于其他类型的文件,可能需要调整MIME类型。
摘要由CSDN通过智能技术生成

写在前面: 因为uniapp不支持H5的录音,所以要靠自己去实现,这里用的是依赖库做实现,调用uni.uploadFile时发现文件后缀丢失的问题,例如我要上传一个文件名为:test.mp3,传到服务器后就变成了test.或者test,反正都把后缀名丢了,这里也去uniapp社区逛了,试下来发现都不行,官方没有提供好的解决方案。

基于这种情况,我就想干脆不用官方提供的API,自己写个上传的方1法不就行了吗?
因为uni本身就提供请求相关的api,所以不想为了一个上传再单独引入axios这样的依赖库,所以决定使用fetch

  • 先从简单的开始写一个fetch方法:
function uploadByFetch (body) {
  return fetch(`上传Url`, {
    method: 'POST',
    headers: '跟其它请求一样的请求头',
    body
  }).then((res) => res.json())
}

接下来别急着去调这个方法,先得搞清楚需要上传的文件在JS中变成了什么类型,是Buffer?Blob?FormData?还是由Blob.createObjectURL()生成的临时路径?
之所以这么问,是因为我在尝试中发现,并不是每种类型都是可以成功的,接下来说说我的答案:

  • 首先我的录音文件的一手类型是Blob,如果你碰巧和我一样,那就照着下面的方式去做即可:
const blob = new Blob()
const file = new window.File(
  [blob],
  'test.mp3', {
    type: 'audio/mpeg'
  }
)
const form = new FormData()
form.append('file', file)

最后将这个form传给上面写的fetch方法即可,如果你的文件类型不是mp3,那么可以参考:MDN Basics_of_HTTP/MIME_types

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值