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

前言

今天写一篇文章,题目为"文件流保存成图片"
前期准备: 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等等)。

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

相关推荐
IT_陈寒13 分钟前
SpringBoot自动配置坑了我一晚上,原来问题出在这
前端·人工智能·后端
kyriewen1 小时前
AI 生成的代码能跑就行?这 5 个坑迟早炸
前端·javascript·ai编程
谷子在生长1 小时前
纯血鸿蒙自定义弹窗最佳实践:从「到处复制」到「一行调用」
前端·harmonyos
壹方秘境1 小时前
我用Go语言开发了一个跨平台的HTTPS抓包和调试工具
前端·后端·ios
神秘面具男1 小时前
HarmonyOS 6.0跨端远程控制
前端·后端
枫树下x1 小时前
NestJS基础框架
前端
胡志辉1 小时前
从v8源码和react深入浅出理解 JavaScript 作用域链与闭包
前端·javascript
天蓝色的鱼鱼1 小时前
React Router v8 来了:react-router-dom 没了,老项目该怎么迁移?
前端·react.js
闪闪发光得欧2 小时前
前端提效新思路:Gemini 3.5 自动化定位 CSS 异常
前端·css
yingyima3 小时前
掌握正则表达式的核心:贪婪与非贪婪匹配的底层机制
前端