🔥前端开发,文件流保存成文件并下载

前言

今天写一篇文章,题目为"文件流保存成图片"
前期准备: vue3、ant-design-vue4

代码部分:

次要代码

template:

script:

主要代码

第一种办法 canvas

利用canvas把图片的url搞出来,然后通过一个a标签点击下载

js 复制代码
const handleChange = async (info) => {
  // 假设fileStream是一个文件流对象

  // 创建一个Image对象
  const image = new Image();

  // 当Image对象加载完成后执行回调函数
  image.onload = function () {
    // 创建一个Canvas元素
    const canvas = document.createElement("canvas");
    canvas.width = image.width;
    canvas.height = image.height;

    // 将文件流绘制到Canvas上
    const context = canvas.getContext("2d");
    context.drawImage(image, 0, 0);

    // 将Canvas转换为DataURL
    const dataURL = canvas.toDataURL("image/png");

    // 创建一个下载链接
    const a = document.createElement("a");
    a.href = dataURL;
    a.download = "image.png";
    document.body.appendChild(a);

    // 触发下载链接
    a.click();

    // 清理下载链接
    document.body.removeChild(a);
  };

  // 将文件流设置为Image对象的src属性
  // 文件流: info.file.originFileObj
  image.src = URL.createObjectURL(info.file.originFileObj);
};

第二种办法 文件流转base64

这篇文章讲解了各种格式互相转换的方法,可以酌情按需看看。

图片的文件流转成图片的base64 URL,然后也是通过a标签点击下载

js 复制代码
/**
 * file转base64
 * @param file       {File}    文件
 * @returns promise  {Promise} 返回base64
 */
 
const fileToBase64 = (file) => {
    return new Promise((resolve, reject) => {
        
        // 使用FileReader对象异步读取文件的内容
        const reader = new FileReader()
        let readerResult = ''
        
        // 开始读取
        reader.readAsDataURL(file)
        
        // 操作完成时触发
        reader.onload = function () {
            readerResult = reader.result
        }
        
        // 读取操作发生错误时触发
        reader.onerror = function (error) {
            reject(error)
        }
        
        // 读取操作结束时触发(要么成功、要么失败)
        reader.onloadend = function () {
            resolve(readerResult)
        }
    })
}

// 文件流通过a标签点击下载图片

ini 复制代码
const handleChange = async (info) => {
  const base64Url = await fileToBase64(info.file.originFileObj);
  console.log(base64Url);

  // 创建一个下载链接
  const a = document.createElement("a");
  a.href = base64Url;
  a.download = "image.png";
  document.body.appendChild(a);

  // 触发下载链接
  a.click();

  // 清理下载链接
  document.body.removeChild(a);
};

效果

如下图:

总结

以上就是将文件流转化成图片,然后进行模拟点击下载链接来保存一些文件(图片、word、pdf等等)。

☎️ 希望对大家有所帮助,如有错误,望不吝赐教,欢迎评论区留言互相学习。感谢阅读!

相关推荐
程序员黑豆1 小时前
使用AI编程开发鸿蒙应用:从环境搭建到实战示例
前端·harmonyos
程序员黑豆4 小时前
鸿蒙应用开发:一次开发多端部署之响应式布局完全指南
前端·harmonyos
小月土星5 小时前
2.0 React Router 前端路由深度解析:从传统后端路由到现代 SPA 的完整演进
前端
badhope3388 小时前
当所有AI都在抄同一份作业:前端模板的趋同、困局与破局
前端·ai·ai编程·前端开发·tailwind·ui设计
光影少年8 小时前
RN的Fabric 渲染流程
运维·前端·javascript·react native·react.js·fabric
__zRainy__9 小时前
React开始:直接在网站中使用React.js
前端·react.js·前端框架
用户0595401744610 小时前
大模型长记忆评测踩坑实录:2000条错位记忆,让我排查了整整3小时
前端·css
码林鼠10 小时前
webpack的基本配置
前端·webpack·node.js
用户9385156350710 小时前
React Router 进阶:路由守卫、登录鉴权与状态传递
前端·javascript·全栈
kyriewen10 小时前
我重写了自己用了两年的防抖节流Hook——发现里面藏着3个隐藏bug
前端·javascript·面试