javascript - 点击后如何从URL保存文件?
问题描述
我在一些有 URL 的单元格中有一个表格,单击保存来自 URL 的文件后我需要。我找到了下载图像的示例-但它不起作用,当我单击时,我在全屏上看到图像;我需要在选择的地方保存文件后。
https://codesandbox.io/s/lucid-wave-pc69e?file=/src/App.js
表格栏:
{
title: '3D model file',
dataIndex: 'file',
key: 'file',
render: (file: string) => {
if (file) {
return <a href={file} onClick={(e) => e.stopPropagation()} download>Download</a>;
}
}
},
解决方案
你有两个选择:
让服务器告诉浏览器应该下载文件而不是在浏览器中查看
为此,您需要让服务器包含 HTTP 标头
Content-Disposition: attachment
或者,使用 JavaScript 传输文件数据,然后使用 JavaScript 将其保存到磁盘
一旦您的 JavaScript 获取了数据,您将创建一个
<a download="DESIRED_FILENAME">
,使用数据构造一个ObjectURL并将其填充到 中href
,然后以编程方式单击锚点
第一个选项是迄今为止最简单的,并且在所有浏览器和平台上都能产生出色的结果。唯一的主要缺点是它需要在服务器上进行代码更改。更改通常很小,尽管有时现存的代码是一团糟,所以即使是简单的事情也很难。
第二个选项适用于桌面浏览器,但对几乎所有移动浏览器产生绝对糟糕的结果。而且它可能需要对服务器进行代码更改——我不知道数据是否可以以其正常的二进制文件传输,或者是否需要使用 base64 之类的东西对其进行编码以进行传输。(我只使用 base64 编码的数据,因为这是我的服务器支持的。)我还怀疑对于不熟悉 JavaScript 并且不知道如何进行自己研究的开发人员来说,实现可能是一个重大挑战。
通过使用WebWorker提供 Content-Disposition 标头,可能可以避免第二个选项的 UX 缺点,但我没有尝试过。
推荐阅读
- r - 使用 apply() 将 NA 替换为数字时强制转换为字符的因子变量
- javascript - 了解 SplitChunksPlugin 与 Webpack 的集成
- html - 将数据源绑定到
- python - 我如何将一个值与多个值进行比较?
- java - 流关闭休眠持久化
- c# - 从应用程序外部直接调用 ASP.NET MVC Web 应用程序中特定视图的正确方法是什么?
- javascript - 确定一个整数是否可以表示为回文和
- javascript - 用 Javascript 替换 [TD]
- amazon-web-services - 我想将同一 IP 地址的不同端口链接到我的实例,以便当我在地址栏中键入它时,它会显示我的网页,该怎么做?
- reactjs - React 将参数传递给类