如何使用javascript更改文件名下载?

时间:2011-09-23 09:23:53

标签: javascript greasemonkey

该脚本会为视频添加下载链接(在特定网站上)。下载时如何将文件名更改为其他内容?

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"

6 个答案:

答案 0 :(得分:5)

这实际上可以通过JavaScript实现,但浏览器支持会有点不稳定。您可以使用XHR2将文件从服务器下载到浏览器作为Blob,创建Blob的URL,创建一个锚点,将其href属性设置为该URL,将download属性设置为您想要的文件名,然后单击链接。这适用于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();

答案 1 :(得分:1)

您无法使用客户端JavaScript执行此操作,您需要设置响应标头...

.NET

Response.AddHeader("Content-Disposition", "inline;filename=myname.txt")

或PHP

header('Content-Disposition: inline;filename=myname.txt')

还可以选择其他服务器端语言。

答案 2 :(得分:1)

下载文件名设置在标题(take a look at "Content-Disposition")中,在服务器端创建。

除非您可以访问服务器端,否则您无法使用纯javascript对要链接的文件进行更改(这样您就可以传递一个额外的参数来提供文件名并将服务器端行为更改为设置标题以匹配...但这也可以使用纯HTML,不需要javascript)。结论:Javascript对于实现你想要的东西是绝对无用的。

答案 3 :(得分:1)

你可以使用probably do this with a Chrome usercript,但是使用Greasemonkey(Firefox)javascript无法完成。

变通方法(最简单到最难):

  1. 使用Greasemonkey添加链接,但使用优秀的DownThemAll! add-on下载并重命名视频。

  2. 按原样下载视频,并使用批处理文件,shell脚本,Python程序等对其进行重命名。

  3. 使用Greasemonkey的GM_xmlhttpRequest()Doc功能将文件发送到您控制的服务器上的Web应用程序。
    此服务器可能是您自己的运行XAMPP(或类似)的PC。

  4. 编写自己的Firefox附加组件,而不是Greasemonkey脚本。加载项具有所需的权限,Greasemonkey没有。

答案 4 :(得分:0)

AFAIK,您将无法从客户端本身做到这一点。您可以先将文件上传到具有所需名称的服务器上,然后将其提供给最终用户(在这种情况下,将使用您的文件名)。

答案 5 :(得分:0)

如果您正在为讨厌的下载Chrome扩展程序寻找这样的解决方案,您应该查看chrome.downloads API,它需要额外的权限('downloads')并允许您指定文件名。 https://developer.chrome.com/extensions/downloads

但是我现在面临着一个问题。我正在重构的chrome扩展有600k +用户群,添加新权限会禁用所有这些扩展。所以这对我来说是不行的解决方案,但是如果你正在开发一个新的扩展,你肯定应该使用它。