How to download a file without using element with download attribute or a server?

According to caniuse the download attribute of <a> element is supported at Microsoft Edge build 10547+, but not IE or Safari.

How to download a file object without using <a> element with download attribute set or a server?


Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

There are a number of ways of triggering a download. Following are a few:

Use a form:

<form method="get" action="mydoc.doc">
<button type="submit">Download</button>

Use javascript:

<button type="submit" onclick="'mydoc.doc')">Download</button>

Method 2

Although I support @LeoFarmer’s answer, I would like to offer two “hackable” approaches:

  1. If the file is very small, you can use a with the href='data:[<mediatype>][;base64],<data>'.

    This could allow you to add content disposition in the mediatype, emulating an HTTP header. This hack is also not as portable as one might hope.

  2. On small to medium files, it’s possible to download the file using AJAX, and then use the Javascript File API to prompt for file saving (the API doesn’t support saving, but it’s easy to convert the data to a data URL).

    If you want to avoid the Javascript File API, you can try emulating an anchor click, as suggested here.

Again, as pointed out by Leo Farmer, these solutions can’t promise that the browser won’t open the file in a new tab instead of saving it to the disk, but I think it’s safe to say that all users will be able to gracefully degrade to a cmd+S or ctrl+S keyboard shortcut 🙂

Method 3

You may do this using both download attribute and jquery. download attribute don’t support in ie and safari/ios. So you may use jquery to do that

 $('.download').click(function(e) {
    e.preventDefault();  //stop the browser from following
    window.location.href = 'uploads/file.doc';

<a href="no-script.html" rel="nofollow noreferrer noopener" class="download">Download</a>

Method 4

Use FileSaver.js

It supports all the commonly used browsers.

Just include:

<script type="text/javascript" src="FileSaver.min.js"></script>

and use it like:

var file = new File(["Hello, world!"], "hello world.txt", {type: "text/plain;charset=utf-8"});

To make it work also in Safari < 6, Opera < 15 and FireFox < 20 you need to include Blob.js as a dependency.

Method 5

You can use data URI data:[<mediatype>][;base64],<data> representation of file either created manually or utilizing FileReader(), .readAsDataURL(), with MIME type set to application/octet-stream, encodeURIComponent(),

  var file = "data:application/octet-stream,"
             + encodeURIComponent("<!DOCTYPE html>"
             + "<html><body>"
             + "<div>abc</div>"
             + "</body></html>");
  var saveFile =, "_self");     
  var blob = new Blob(["abc"], {type:"text/plain"});
  var reader = new FileReader();
  reader.addEventListener("load", function(e) {
    // replace existing `MIME` type with `application/octet-stream`
    var file = "data:application/octet-stream;" 
    var saveFile =, "_self");


Method 6

If you’re using server-side then follow the form submission mechanism to render the page.
In MVC we can use below code


  @using (Html.BeginForm("GetAttachment", "User", FormMethod.Post))

                    <button type="submit">Download</button>   

MVC Controller

public ActionResult GetAttachment()
   string filename = "File.pdf";
string filepath = AppDomain.CurrentDomain.BaseDirectory + "/Path/To/File/" + filename;
byte[] filedata = System.IO.File.ReadAllBytes(filepath);
string contentType = MimeMapping.GetMimeMapping(filepath);

var cd = new System.Net.Mime.ContentDisposition
    FileName = filename,
    Inline = true,

Response.AppendHeader("Content-Disposition", cd.ToString());

return File(filedata, contentType);

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Notify of

Inline Feedbacks
View all comments
Would love your thoughts, please comment.x