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

前言

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

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

相关推荐
小小小小宇4 小时前
虚拟列表兼容老DOM操作
前端
悦悦子a啊4 小时前
Python之--基本知识
开发语言·前端·python
安全系统学习5 小时前
系统安全之大模型案例分析
前端·安全·web安全·网络安全·xss
涛哥码咖5 小时前
chrome安装AXURE插件后无效
前端·chrome·axure
OEC小胖胖5 小时前
告别 undefined is not a function:TypeScript 前端开发优势与实践指南
前端·javascript·typescript·web
行云&流水6 小时前
Vue3 Lifecycle Hooks
前端·javascript·vue.js
Sally璐璐6 小时前
零基础学HTML和CSS:网页设计入门
前端·css
老虎06276 小时前
JavaWeb(苍穹外卖)--学习笔记04(前端:HTML,CSS,JavaScript)
前端·javascript·css·笔记·学习·html
灿灿121386 小时前
CSS 文字浮雕效果:巧用 text-shadow 实现 3D 立体文字
前端·css
烛阴6 小时前
Babel 完全上手指南:从零开始解锁现代 JavaScript 开发的超能力!
前端·javascript