Why threre is no way to download file using ajax request?
It's not about AJAX. You can download a file with AJAX, of course. However the file will be kept in memory, i.e. you cannot save file to disk. This is because JavaScript cannot interact with disk. That would be a serious security issue and it is blocked in all major browsers.
Download a file by jQuery.Ajax
2019 modern browsers update
This is the approach I'd now recommend with a few caveats:
- A relatively modern browser is required
- If the file is expected to be very large you should likely do something similar to the original approach (iframe and cookie) because some of the below operations could likely consume system memory at least as large as the file being downloaded and/or other interesting CPU side effects.
fetch('https://jsonplaceholder.typicode.com/todos/1') .then(resp => resp.blob()) .then(blob => { const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.style.display = 'none'; a.href = url; // the filename you want a.download = 'todo-1.json'; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); alert('your file has downloaded!'); // or you know, something with better UX... }) .catch(() => alert('oh no!'));
download file using an ajax request
Update April 27, 2015
Up and coming to the HTML5 scene is the download attribute. It's supported in Firefox and Chrome, and soon to come to IE11. Depending on your needs, you could use it instead of an AJAX request (or using window.location
) so long as the file you want to download is on the same origin as your site.
You could always make the AJAX request/window.location
a fallback by using some JavaScript to test if download
is supported and if not, switching it to call window.location
.
Original answer
You can't have an AJAX request open the download prompt since you physically have to navigate to the file to prompt for download. Instead, you could use a success function to navigate to download.php. This will open the download prompt but won't change the current page.
$.ajax({
url: 'download.php',
type: 'POST',
success: function() {
window.location = 'download.php';
}
});
Even though this answers the question, it's better to just use window.location
and avoid the AJAX request entirely. File downloading using AJAX not working
You are using $("#display").after(html);
thats why its displaying the content of the file. You can download the file by following code.
$(function() {
$(".download_link").click(function() {
var test = $("#content").val();
var dataString = 'content='+ test;
$.ajax({
type: "POST",
url: "download_file.php",
data: dataString,
cache: false,
success: function(html){
window.location = 'your_file.pdf';
}
});
return true;
});
});
How to download a file through ajax request in asp.net MVC 4
Please, try this in ajax success
success: function () {
window.location = '@Url.Action("DownloadAttachment", "PostDetail")';
}
Updated answer:public ActionResult DownloadAttachment(int studentId)
{
// Find user by passed id
// Student student = db.Students.FirstOrDefault(s => s.Id == studentId);
var file = db.EmailAttachmentReceived.FirstOrDefault(x => x.LisaId == studentId);
byte[] fileBytes = System.IO.File.ReadAllBytes(file.Filepath);
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, file.Filename);
}
Ajax request:$(function () {
$("#DownloadAttachment").click(function () {
$.ajax(
{
url: '@Url.Action("DownloadAttachment", "PostDetail")',
contentType: 'application/json; charset=utf-8',
datatype: 'json',
data: {
studentId: 123
},
type: "GET",
success: function () {
window.location = '@Url.Action("DownloadAttachment", "PostDetail", new { studentId = 123 })';
}
});
});
});
Handle file download from ajax post
Create a form, use the POST method, submit the form - there's no need for an iframe. When the server page responds to the request, write a response header for the mime type of the file, and it will present a download dialog - I've done this a number of times.
You want content-type of application/download - just search for how to provide a download for whatever language you're using.
File download script doesn't work when called from Ajax
You cannot use AJAX to download files. It doesn't make sense. You can send the AJAX request and fetch the file contents inside the success handler on the client, but for obvious security reasons you can't do much with it. You cannot save it on the client computer and there's no javascript API allowing you to prompt the user where to save it.
So to download files, don't use AJAX. Create an anchor pointing to your server side script that serves the file to be downloaded.
Downloading file via AJAX request
It's AFAIK not possible to let users download files using AJAX requests and I see no reason to do it that way, since the user will remain on the page when downloading a file.
For a file to be downloaded, the response must be handled by the web browser rather than your JavaScript code.
Related Topics
JavaScript "Variable Variables": How to Assign Variable Based on Another Variable
How to Set Node_Env to Production/Development in Os X
Understanding JavaScript Promise Object
Do Browsers Parse JavaScript on Every Page Load
Subject VS Behaviorsubject VS Replaysubject in Angular
How to Check "Checkbox" Dynamically - Jquery Mobile
When Do I Need to Specify the JavaScript Protocol
Why Does If("String") Evaluate "String" as True But If ("String"==True) Does Not
What Is Event Pooling in React
How to Deeply Merge Two Object Values by Keys
Why "This" Is Undefined Inside a Fat Arrow Function Definition
Check If File Exists But Prevent 404 Error in Console from Showing Up
What's "This" in JavaScript Onclick
Efficient Way to Insert a Number into a Sorted Array of Numbers
How to Create an Auto-Complete Combobox