নীচে কয়েকটি আইডি সমন্বিত কিছু তালিকার উপর নির্ভর করে একাধিক ফাইল ডাউনলোড করার এবং আমার ডাটাবেসে অনুসন্ধান করার জন্য আমার সমাধানটি দেওয়া আছে, ফাইলগুলি নির্ধারিত হবে এবং ডাউনলোডের জন্য প্রস্তুত থাকবে - যদি সেগুলি বিদ্যমান থাকে। আমি আজাক্স ব্যবহার করে প্রতিটি ফাইলের জন্য সি # এমভিসি অ্যাকশন কল করছি।
এবং হ্যাঁ, অন্যরা যেমন বলেছেন, jQuery আজাক্সে এটি করা সম্ভব। আমি এটি আজাক্স সাফল্যের সাথে করেছি এবং আমি সর্বদা 200 টি প্রতিক্রিয়া প্রেরণ করছি।
সুতরাং, এটি মূল:
success: function (data, textStatus, xhr) {
এবং এটি আমার কোড:
var i = 0;
var max = 0;
function DownloadMultipleFiles() {
if ($(".dataTables_scrollBody>tr.selected").length > 0) {
var list = [];
showPreloader();
$(".dataTables_scrollBody>tr.selected").each(function (e) {
var element = $(this);
var orderid = element.data("orderid");
var iscustom = element.data("iscustom");
var orderlineid = element.data("orderlineid");
var folderPath = "";
var fileName = "";
list.push({ orderId: orderid, isCustomOrderLine: iscustom, orderLineId: orderlineid, folderPath: folderPath, fileName: fileName });
});
i = 0;
max = list.length;
DownloadFile(list);
}
}
তারপরে ফোন করা:
function DownloadFile(list) {
$.ajax({
url: '@Url.Action("OpenFile","OrderLines")',
type: "post",
data: list[i],
xhrFields: {
responseType: 'blob'
},
beforeSend: function (xhr) {
xhr.setRequestHeader("RequestVerificationToken",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
success: function (data, textStatus, xhr) {
// check for a filename
var filename = "";
var disposition = xhr.getResponseHeader('Content-Disposition');
if (disposition && disposition.indexOf('attachment') !== -1) {
var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
var matches = filenameRegex.exec(disposition);
if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
var a = document.createElement('a');
var url = window.URL.createObjectURL(data);
a.href = url;
a.download = filename;
document.body.append(a);
a.click();
a.remove();
window.URL.revokeObjectURL(url);
}
else {
getErrorToastMessage("Production file for order line " + list[i].orderLineId + " does not exist");
}
i = i + 1;
if (i < max) {
DownloadFile(list);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
},
complete: function () {
if(i===max)
hidePreloader();
}
});
}
সি # এমভিসি:
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult OpenFile(OrderLineSimpleModel model)
{
byte[] file = null;
try
{
if (model != null)
{
//code for getting file from api - part is missing here as not important for this example
file = apiHandler.Get<byte[]>(downloadApiUrl, token);
var contentDispositionHeader = new System.Net.Mime.ContentDisposition
{
Inline = true,
FileName = fileName
};
// Response.Headers.Add("Content-Disposition", contentDispositionHeader.ToString() + "; attachment");
Response.Headers.Add("Content-Type", "application/pdf");
Response.Headers.Add("Content-Disposition", "attachment; filename=" + fileName);
Response.Headers.Add("Content-Transfer-Encoding", "binary");
Response.Headers.Add("Content-Length", file.Length.ToString());
}
}
catch (Exception ex)
{
this.logger.LogError(ex, "Error getting pdf", null);
return Ok();
}
return File(file, System.Net.Mime.MediaTypeNames.Application.Pdf);
}
যতক্ষণ আপনি 200 প্রতিক্রিয়া প্রত্যাবর্তন করবেন, এজাক্সে সাফল্য এটির সাথে কাজ করতে পারে, আপনি যাচাই করতে পারেন ফাইলটি আসলে বিদ্যমান আছে কিনা এই ক্ষেত্রে নীচের লাইনটি মিথ্যা হবে এবং আপনি ব্যবহারকারীকে সে সম্পর্কে অবহিত করতে পারেন:
if (disposition && disposition.indexOf('attachment') !== -1) {