我如何改变一个文件名下载与javascript
How do I change a filename on-download with javascript?
脚本添加了视频下载链接(在特定网站上)。如何在下载时将文件名更改为其他内容?
Example URL:
"http://website.com/video.mp4"
Example of what I want the filename to be saved as during download:
"The_title_renamed_with_javascript.mp4"
这实际上是可以用JavaScript,虽然浏览器支持将参差不齐。您可以使用XHR2将文件作为Blob从服务器下载到浏览器,创建Blob的URL,创建锚并将其href属性设置为该URL,将下载属性设置为您想要的文件名,然后单击链接。这可以在Google Chrome中工作,但我还没有验证在其他浏览器中的支持。
window.URL = window.URL || window.webkitURL;
var xhr = new XMLHttpRequest(),
a = document.createElement('a'), file;
xhr.open('GET', 'someFile', true);
xhr.responseType = 'blob';
xhr.onload = function () {
file = new Blob([xhr.response], { type : 'application/octet-stream' });
a.href = window.URL.createObjectURL(file);
a.download = 'someName.gif'; // Set to whatever file name you want
// Now just click the link you created
// Note that you may have to append the a element to the body somewhere
// for this to work in Firefox
a.click();
};
xhr.send();
你不能在客户端JavaScript中这样做,你需要设置响应头…
。净
Response.AddHeader("Content-Disposition", "inline;filename=myname.txt")
PHP 或
header('Content-Disposition: inline;filename=myname.txt')
也可在您选择的其他服务器端语言中使用。
下载文件名设置在服务器端创建的页眉中(看一下"Content-Disposition")。
没有办法你可以改变与纯javascript上的文件,你链接到,除非你有访问服务器端(这样你可以传递一个额外的参数给出文件名和改变服务器端行为设置头匹配…但这也可能与纯html,不需要javascript)。总结:Javascript对于实现你想要的东西是绝对无用的。
您可以可能使用Chrome userscript完成此操作,但它不能(目前)使用Greasemonkey (Firefox) javascript完成。
变通方法(从最简单到最难):
-
使用Greasemonkey添加链接,但使用优秀的DownThemAll!
-
按原样下载视频,并使用批处理文件、shell脚本、Python程序等来重命名它们。
-
使用Greasemonkey的
GM_xmlhttpRequest()
Doc函数将文件发送到您控制的服务器上的web应用程序。
该服务器可以是运行XAMPP(或类似)的您自己的PC。 -
编写您自己的Firefox插件,而不是Greasemonkey脚本。add -on具有所需的权限,Greasemonkey没有
当然,您将无法从客户端本身正确执行此操作。您可以首先将文件上传到具有所需名称的服务器上,然后将其返回给最终用户(在这种情况下将使用您的文件名)。
万一你正在寻找这样一个解决方案为您讨厌的下载chrome扩展,你应该看看chrome。下载API,它需要额外的权限('downloads'),并允许你指定文件名。https://developer.chrome.com/extensions/downloads
然而,我现在面临一个问题。我正在重构的chrome扩展有600k+用户群,添加一个新的权限将禁用所有扩展。所以这对我来说是不去的解决方案,但如果你正在开发一个新的扩展,你绝对应该使用它。
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- jQuery:循环一个具有不同超时值的循环
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 从javascript创建一个列表
- 节点导出返回一个空对象
- 需要一个类似于“另存为”对话框的解决方案来使用 javascript 选择文件名和位置
- 我得到一个未定义而不是文件名
- 它只显示一个文件名
- 选择文件时,Jquery显示一个或多个文件名
- jCarousel:获取当前显示的图像的文件名(路径)(一次只显示一个)
- 用JavaScript创建一个文件名和内容变量的文件
- 在PHP中将一个文件名列表转换为文件树
- 我如何改变一个文件名下载与javascript
- Javascript自动完成与源是文件名从一个目录
- node:如何访问json键,json键是一个带点的文件名
- 是否有可能加载一个文件与JS/HTML5 FileReader从文件名没有输入文件
- 如何给Blob上传作为FormData一个文件名
- 我怎样才能在公共目录中创建一个不可猜测的随机文件名
- 制作一个Chrome扩展下载(不查看)链接和自定义文件名
- 将输出图像保存到另一个目录中,并使用新的文件名和扩展名