我有一些大尺寸的PDF目录在我的网站上,我需要链接这些下载。当我在谷歌上搜索时,我发现下面有这样一件事。它应该打开“另存为…”弹出链接点击…
<head>
<meta name="content-disposition" content="inline; filename=filename.pdf">
...
但它不工作:/当我链接到一个文件如下,它只是链接到文件,并试图打开文件。
<a href="filename.pdf" title="Filie Name">File name</a>
更新(根据以下答案):
据我所知,没有100%可靠的跨浏览器解决方案。也许最好的方法是使用下面列出的web服务之一,并提供下载链接…
http://box.net/
http://droplr.com/
http://getcloudapp.com/
Chrome 91有一个新的变化,它支持Chrome 86-90和91+。
下面的语法将使其发生。
const fileHandle = await self.showSaveFilePicker({
suggestedName: 'Untitled Text.txt',
types: [{
description: 'Text documents',
accept: {
'text/plain': ['.txt'],
},
}],
});
点击此处阅读更多信息:
https://developer.chrome.com/blog/new-in-chrome-91/
**另一个解决方案,你可以把它作为一个blob,然后使用savas **
const blob = fetch("some-url-here").then(data => data.blob());
saveAs(blob, "filename.txt")
使用download属性,但要考虑到它只适用于与您的代码位于同一源中的文件。这意味着用户只能下载来自源站点、同一主机的文件。
用原始文件名下载:
<a href="file link" download target="_blank">Click here to download</a>
用“some_name”作为文件名下载:
<a href="file link" download="some_name" target="_blank">Click here to download</a>
添加target="_blank",我们将使用一个新的标签,而不是实际的标签,而且它将有助于在某些情况下下载属性的正确行为。
它遵循与同源策略相同的规则。您可以在MDN Web Doc同源策略页面上了解有关此策略的更多信息
你可以在MDN Web Doc锚的属性页面上了解更多关于这个下载HTML5属性的信息。
我只是有一个非常类似的问题,我需要在一个ZIP文件中创建下载链接。
我首先尝试创建一个临时文件,然后提供一个到临时文件的链接,但我发现一些浏览器只会显示内容(一个CSV Excel文件)而不提供下载。最终我通过使用servlet找到了解决方案。它可以在Tomcat和GlassFish上运行,我还在Internet Explorer 10和Chrome上试用了它。
servlet将ZIP文件的完整路径名和应该下载的ZIP文件中的文件名作为输入。
在我的JSP文件中,我有一个表,显示zip中的所有文件,其中的链接说:onclick='download?邮政= < % = zip % > csv = < % = % > csv '
servlet代码在download.java中:
package myServlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.zip.*;
import java.util.*;
// Extend HttpServlet class
public class download extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
PrintWriter out = response.getWriter(); // now we can write to the client
String filename = request.getParameter("csv");
String zipfile = request.getParameter("zip");
String aLine = "";
response.setContentType("application/x-download");
response.setHeader( "Content-Disposition", "attachment; filename=" + filename); // Force 'save-as'
ZipFile zip = new ZipFile(zipfile);
for (Enumeration e = zip.entries(); e.hasMoreElements();) {
ZipEntry entry = (ZipEntry) e.nextElement();
if(entry.toString().equals(filename)) {
InputStream is = zip.getInputStream(entry);
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"), 65536);
while ((aLine = br.readLine()) != null) {
out.println(aLine);
}
is.close();
break;
}
}
}
}
要在Tomcat上编译,你需要类路径包含Tomcat \lib\servlet-api.jar或GlassFish上的:GlassFish \lib\j2ee.jar
但任何一种都能同时发挥作用。您还需要在web.xml中设置servlet。
Chrome 91有一个新的变化,它支持Chrome 86-90和91+。
下面的语法将使其发生。
const fileHandle = await self.showSaveFilePicker({
suggestedName: 'Untitled Text.txt',
types: [{
description: 'Text documents',
accept: {
'text/plain': ['.txt'],
},
}],
});
点击此处阅读更多信息:
https://developer.chrome.com/blog/new-in-chrome-91/
**另一个解决方案,你可以把它作为一个blob,然后使用savas **
const blob = fetch("some-url-here").then(data => data.blob());
saveAs(blob, "filename.txt")