Force to open “Save As…” popup open at text link click for PDF in HTML

后端 未结 18 1145
無奈伤痛
無奈伤痛 2020-11-22 10:28

I have some big size PDF catalogs at my website, and I need to link these as download. When I googled, I found such a thing noted below. It should open the \"Save As

相关标签:
18条回答
  • 2020-11-22 11:20

    From an answer to Force a browser to save file as after clicking link:

    <a href="path/to/file" download>Click here to download</a>
    
    0 讨论(0)
  • 2020-11-22 11:21

    This is old post but here is the one my solution in JavaScript what using jQuery library.

    <script>
    (function($){
        var download = [];
        $('a.force-download, .force-download a').each(function(){
            // Collect info
            var $this = $(this),
                $href = $this.attr('href'),
                $split = $href.split('/'),
                $name = document.title.replace(/[\W_]/gi, '-').replace(/-{2,}/g, '-'); // get title and clean it for the URL
    
            // Get filename from URL
            if($split[($split.length-1)])
            {
                $tmp = $split[($split.length-1)];
                $tmp = $tmp.split('.');
                $name = $tmp[0].replace(/[\W_]/gi, '-').replace(/-{2,}/g, '-');
            }
    
            // If name already exists, put timestamp there
            if($.inArray($name, download) > -1)
            {
                $name = $name + '-' + Date.now().replace(/[\W]/gi, '-');
            }
    
            $(this).attr("download", $name);
            download.push($name);
        });
    }(jQuery || window.jQuery))
    </script>
    

    You just need to use class force-download inside your <a> tag and will force download automaticaly. You also can add it to parent div and will pickup all links inside it.

    Example:

    <a href="/some/good/url/Post-Injection_Post-Surgery_Instructions.pdf" class="force-download" target="_blank">Download PDF</a>
    

    This is great for WordPress and any other systems or custom websites.

    0 讨论(0)
  • 2020-11-22 11:21

    I just had a very similar issue with the added problem that I needed to create download links to files inside a ZIP file.

    I first tried to create a temporary file, then provided a link to the temporary file, but I found that some browsers would just display the contents (a CSV Excel file) rather than offering to download. Eventually I found the solution by using a servlet. It works both on Tomcat and GlassFish, and I tried it on Internet Explorer 10 and Chrome.

    The servlet takes as input a full path name to the ZIP file, and the name of the file inside the zip that should be downloaded.

    Inside my JSP file I have a table displaying all the files inside the zip, with links that say: onclick='download?zip=<%=zip%>&csv=<%=csv%>'

    The servlet code is in 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;
                }
            }
        }
    }
    

    To compile on Tomcat you need the classpath to include tomcat\lib\servlet-api.jar or on GlassFish: glassfish\lib\j2ee.jar

    But either one will work on both. You also need to set your servlet in web.xml.

    0 讨论(0)
  • 2020-11-22 11:22

    Just put the below code in your .htaccess file:

    AddType application/octet-stream .csv
    AddType application/octet-stream .xls
    AddType application/octet-stream .doc
    AddType application/octet-stream .avi
    AddType application/octet-stream .mpg
    AddType application/octet-stream .mov
    AddType application/octet-stream .pdf
    

    Or you can also do trick by JavaScript

    element.setAttribute( 'download', whatever_string_you_want);
    
    0 讨论(0)
  • 2020-11-22 11:23

    I had this same issue and found a solution that has worked great so far. You put the following code in your .htaccess file:

    <FilesMatch "\.(?i:pdf)$">
      ForceType application/octet-stream
      Header set Content-Disposition attachment
    </FilesMatch>
    

    It came from Force a File to Download Instead of Showing Up in the Browser.

    0 讨论(0)
  • 2020-11-22 11:24

    Try adding this line to your .htaccess file.

    AddType application/octet-stream .pdf

    I hope it'll work as it is browser independent.

    0 讨论(0)
提交回复
热议问题