JavaScript文本转文件下载、下载图片、下载视频

JavaScript文本转文件下载、下载图片、下载视频

下载媒体文件时,如果图片地址可以显示但是传过来的内容不是图片格式,使用封装方法downloadURI不会进行下载,点击下载按钮后会跳转到这个图片页面。

如果使用方法downloadURI不能下载需要请求下载资源之后进行下载

封装方法

javascript 复制代码
export const downloadBlob = (blob: Blob, name: string) => {
  // 创建一个下载链接并模拟点击
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = name;
  document.body.appendChild(a);
  a.click();

  // 清理
  document.body.removeChild(a);
  URL.revokeObjectURL(url);
};

/**
 * 导出图像
 * @param uri
 * @param name
 */
export function downloadURI(uri: string, name: string) {
  const link = document.createElement('a');
  link.download = name;
  link.href = uri;
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
}

Demo示例

示例方法中提供了两种下载方式分别是:Blob和链接下载

html 复制代码
<script lang="ts" setup>
import { ref } from 'vue';
import { downloadBlob, downloadURI } from '@/views/test/download/downloadUtil.ts';

const text = ref('文本内容...');
const image = 'https://gips2.baidu.com/it/u=1651586290,17201034&fm=3028&app=3028&f=JPEG&fmt=auto&q=100&size=f600_800';
const video = ref('https://videos.pexels.com/video-files/26806984/12011233_360_640_24fps.mp4');
/**
 * * 下载文本
 */
const onDownloadText = () => {
  const blob = new Blob([text.value], { type: 'text/plain;charset=utf-8' });
  downloadBlob(blob, '下载文本.txt');
};

/**
 * * 下载图片
 */
const onDownloadImage = () => {
  const imageBlob = fetch(image).then(res => res.blob());
  imageBlob.then(blob => downloadBlob(blob, 'blob图片.png'));

  // 如果浏览器返回的不是图片格式会跳转到图片页面
  downloadURI(image, 'a标签图片.png');
};

/**
 * * 下载视频
 */
const onDownloadVideo = () => {
  const imageBlob = fetch(video.value).then(res => res.blob());
  imageBlob.then(blob => downloadBlob(blob, 'blob视频.mp4'));

  downloadURI(video.value, 'a标签视频.mp4');
};
</script>

<template>
  <div class="contain-layout">
   <div>
    <button class="btn btn-primary" @click="onDownloadText">下载文本</button>
    <button class="btn btn-primary" @click="onDownloadImage">下载图片</button>
    <button class="btn btn-primary" @click="onDownloadVideo">下载视频</button>
   </div>

   <div class="row mt-3">
    <textarea :value="text" class="w-[400px]" />
    <img :src="image" alt="" class="w-[150px] h-[150px]" />
    <video :src="video" alt="" class="w-[300px] h-[300px]" />
   </div>
  </div>
</template>
相关推荐
不会敲代码110 分钟前
手写 Mini React:从 JSX 到虚拟 DOM 再到 render,搞懂 React 底层原理
前端·javascript·react.js
lichenyang4531 小时前
媒体选择、上传与音频采集 API 实现流程
oracle·音视频·媒体·android-studio
kyriewen1 小时前
你的代码仓库变成“毛线团”了?Monorepo 用 Turborepo 拆成“乐高积木”
前端·javascript·面试
身如柳絮随风扬1 小时前
你知道什么是 Ajax 吗?—— 从入门到原理,一篇彻底搞懂
前端·ajax·okhttp
旷世奇才李先生2 小时前
Vue3\+TypeScript 2026实战——企业级前端项目架构搭建与性能优化全指南
前端·架构·typescript
Beginner x_u2 小时前
前端八股整理(工程化 02)|CommonJS/ESM、Webpack Loader/Plugin 与Vite 对比
前端·webpack·node.js·plugin·loader
openKaka_3 小时前
createRoot 到底创建了什么:FiberRootNode 和 HostRootFiber 的初始化过程
前端·javascript·react.js
习明然3 小时前
UniApp开发体验感受总结
前端·uni-app
刀法如飞4 小时前
Claude Code Skills 推荐:2026年最值得安装的10个AI技能
前端·后端·ai编程
阿豪只会阿巴4 小时前
【没事学点啥】TurboBlog轻量级个人博客项目——项目介绍
javascript·python·django·html