javascript文本转文件下载、下载图片、下载视频
下载媒体文件时,如果图片地址可以显示但是传过来的内容不是图片格式,使用封装方法downloaduri
不会进行下载,点击下载按钮后会跳转到这个图片页面。
如果使用方法downloaduri
不能下载需要请求下载资源之后进行下载
封装方法
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
和链接下载
<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>
发表评论