react实现文件下载和预览图片

平时开发中又下载文件的,我们会根据url下载下来,然后重命名成我们的原始名字,这是比较符合我们原始需求的,因此我们需要先通过请求下载下来二进制图片信息,然后通过 a 标签实现下载功能

如下所示,我们实现文件下载,然后使用 a 标签实现保存到本地(实际上做了个另存为的功能),否则直接给定 url 直接下载即可

js 复制代码
import request from 'umi-request';

export const downloadWithUrl = (urlString: string, filename?: string) => {
    const aLink = document.createElement('a');
    request
        .get(urlString, {
            responseType: 'blob', //设置响应的数据类型为一个包含二进制数据的 Blob 对象,必须设置!!!
        })
        .then((res) => {
            if (res) {
                const url = URL.createObjectURL(new Blob([res]));
                const urlFilename = urlString.split('/').at(-1);
                aLink.download = filename
                    ? filename
                    : urlFilename
                      ? urlFilename
                      : new Date().getTime().toString();
                aLink.style.display = 'none';
                aLink.href = url;
                document.body.appendChild(aLink);
                aLink.click();
                document.body.removeChild(aLink);
                URL.revokeObjectURL(url);
            }
        });
};

图片预览也比较常见,我们可以直接通过 url,使用特定组件直接显示,antd图片默认支持,也可以使用下面的操作,需要注意的是,url本身访问默认是预览,而不是下载(一些可能需要上传时设置type为image的minetype类型),这个操作是浏览器自带的,仅仅支持图片,不支持其他文件,其他文件预览需要自己加功能了,想做的详细,那么就分类型处理显示的问题了

js 复制代码
window.open(url, '_blank');
相关推荐
小林ixn11 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
半个落月19 小时前
用 React 搭一个 WebGPU 模型加载页:从状态驱动到可复用进度条
前端·react.js
无人生还20 小时前
第 1 篇:从 Vue3 到 React 的思维转变
前端·vue.js·react.js
breeze jiang21 小时前
从原生事件到 React 组件化:用状态驱动模型加载进度 UI
前端·react.js·ui
名字还没想好☜21 小时前
React setState 连续调用「丢更新」排查:批量更新与函数式更新
前端·javascript·react.js·react·usestate
sugar__salt21 小时前
DeepSeek-R1 WebGPU (1):在浏览器里跑大模型
react.js·reactjs·react·端模型
张元清1 天前
React useCookie Hook:把 Cookie 变成响应式状态(2026)
javascript·react.js
索西引擎1 天前
【React】Immer.js 在现代 Redux 生态中的角色:不可变性保障的工程化实现与开发体验优化
前端·javascript·react.js
kisshyshy1 天前
《川剧变脸 × React 状态管理?我在浏览器里跑了个端侧大模型》
前端·react.js·架构