欢迎访问我的博客,目前从事Machine Learning,欢迎交流

前端/H5/JS:通过URL下载文件并转存到其他服务器(微信),Blob文件转File文件,下载到本地

现在有一个图片URL,在自己服务器上,一个微信提供的媒体文件上传URL,我在前端通过JS实现转存微信服务器

1. http://file.xxx.com/asd.jpg 自己的

2.https://api.weixin.qq.com/cgi-bin 微信

 

浏览器访问http://file.xxx.com/asd.jpg,看到一个图,并且,请求的 Content-Type:image/jpeg

首先,先把文件以Blob下载下来到内存

PS:也可以提供一个本地路径,来进行下载到nodejs/浏览器管理的内存中

复制代码
function getBlob(url, callback) { 
        var xhr = new XMLHttpRequest()
        xhr.open('GET', url)
        xhr.responseType = 'blob'
        xhr.onload = () => {
            console.log(xhr.response)
        }
        xhr.send()
}
复制代码

 

console打印如下:

Blob {size: 5523, type: "image/jpeg"} 

 

 

 

然后,把Blob转File

const blob = xhr.response
const files = new window.File([blob], `abc.${blob.type.split('/')[1]}`, { type: blob.type })

打印File如下

 

 

 

接着,用Form包裹,

 

  const formData = new FormData()
  formData.append('media', files)

 

最后,把formData放到POST的body,调用上传即可

 

2020.07.03 更新

有同学问到,如果想要把该blob文件下载到本地,怎么做

 

复制代码
 function downloadFileByBlob (blobUrl, filename) {
    const a = document.createElement('a')
    a.download = filename
    a.style.display = 'none'
    a.href = blobUrl
    // 触发点击
    document.body.appendChild(a)
    a.click()
    // 然后移除
    document.body.removeChild(a)
  }
复制代码

 

应该在onload的回调里,这样调用

xhr.onload = () => {
      const blob = xhr.response
      const blobUrl = window.URL.createObjectURL(blob)
      downloadFileByBlob(blobUrl, `abc.${blob.type.split('/')[1]}`)
}

 

posted @   有蚊子  阅读(5748)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示