Anonymous
Загрузить файл не удалось с использованием ответа ASP.NET Core
Сообщение
Anonymous » 22 апр 2024, 23:09
У меня есть следующий код для загрузки файла
jquery
Код: Выделить всё
function DownloadExcel() {
var laundrys = new Object();
$.ajax({
type: 'POST',
url: '@Url.Content("Laundry/DownloadExcel")',
data: { laundry: laundrys},
dataType: 'json',
beforeSend: function () {
$("#loadinggif").show();
},
success: function (result) {
$("#loadinggif").hide();
if (result.isuccess) {
GenerateFile(result);
}
else {
Swal.fire('Error Found', result.messageerror, 'error');
}
},
error: function (result) {
$("#loadinggif").hide();
Swal.fire('Unknown Error', result, 'error');
}
});
}
function GenerateFile(result) {
$.fileDownload('@Url.Content("Laundry/GenerateFiles")',
{
httpMethod: "POST",
data: {
folder: result.folder,
filesname: result.filesname
},
successCallback: function (url) {
Swal.fire('Download Success', "", 'success');
},
failCallback: function (responseHtml, url) {
Swal.fire('Download Failed',responseHtml, 'error');
}
});
}
и это код в моем C#
C#
Код: Выделить всё
public JsonResult DownloadExcel(Laundry laundry)
{
bool result = true;
string MsgError = null;
string Folder = null;
string FileName = "GenerateFile-"+ DateTime.Now.ToString("yyyyMMdd_HHmmss").Replace("/", "-")+".xls";
try
{
string startupPath = _webHostEnvironment.WebRootPath;
Folder = startupPath + "\\template\\";
string Path = Folder + "Template.xls";
string NewPath = Folder + FileName;
System.IO.File.Copy(Path, NewPath, true);
HSSFWorkbook workBook;
using (FileStream fs = new FileStream(NewPath, FileMode.Open, FileAccess.Read))
{
workBook = new HSSFWorkbook(fs);
}
//mycode
workBook.SetSheetName(0, "Report Laundry");
using (FileStream fs = new FileStream(NewPath, FileMode.Create, FileAccess.Write))
{
workBook.Write(fs);
fs.Close();
}
}
catch(Exception e)
{
result = false;
MsgError = "Error Exception: " + e.Message;
}
return Json(new { isuccess = result, messageerror = MsgError,folder = Folder, filesname = FileName, });
}
public ActionResult GenerateFiles(string folder, string filesname)
{
string Msg = "success";
try
{
byte[] Data = System.IO.File.ReadAllBytes(folder + filesname);
string contentType;
new FileExtensionContentTypeProvider().TryGetContentType(filesname, out contentType);
HttpContext.Response.Clear();
HttpContext.Response.ContentType = contentType;
HttpContext.Response.Headers.Add("Content-Length", Convert.ToString(Data.Length));
HttpContext.Response.Headers.Add("Content-Disposition", string.Format("{0};FileName=\"{1}\"", "attachment", filesname));
HttpContext.Response.Headers.Add("Set-Cookie", "fileDownload=true; path=/");
HttpContext.Response.Body.WriteAsync(Data);
}
catch(Exception e)
{
Msg = "error Exception : "+e.Message;
}
System.IO.File.Delete(folder + filesname);
return Json(Msg);
}
когда я использую следующий код, загрузка прошла успешно, но файл не загружается с сообщением об ошибке «Сбой сети». Это вызвано неправильным написанием кода ответа?
Подробнее здесь:
https://stackoverflow.com/questions/707 ... p-net-core
1713816595
Anonymous
У меня есть следующий код для загрузки файла [b]jquery[/b] [code] function DownloadExcel() { var laundrys = new Object(); $.ajax({ type: 'POST', url: '@Url.Content("Laundry/DownloadExcel")', data: { laundry: laundrys}, dataType: 'json', beforeSend: function () { $("#loadinggif").show(); }, success: function (result) { $("#loadinggif").hide(); if (result.isuccess) { GenerateFile(result); } else { Swal.fire('Error Found', result.messageerror, 'error'); } }, error: function (result) { $("#loadinggif").hide(); Swal.fire('Unknown Error', result, 'error'); } }); } function GenerateFile(result) { $.fileDownload('@Url.Content("Laundry/GenerateFiles")', { httpMethod: "POST", data: { folder: result.folder, filesname: result.filesname }, successCallback: function (url) { Swal.fire('Download Success', "", 'success'); }, failCallback: function (responseHtml, url) { Swal.fire('Download Failed',responseHtml, 'error'); } }); } [/code] и это код в моем C# [b]C#[/b] [code]public JsonResult DownloadExcel(Laundry laundry) { bool result = true; string MsgError = null; string Folder = null; string FileName = "GenerateFile-"+ DateTime.Now.ToString("yyyyMMdd_HHmmss").Replace("/", "-")+".xls"; try { string startupPath = _webHostEnvironment.WebRootPath; Folder = startupPath + "\\template\\"; string Path = Folder + "Template.xls"; string NewPath = Folder + FileName; System.IO.File.Copy(Path, NewPath, true); HSSFWorkbook workBook; using (FileStream fs = new FileStream(NewPath, FileMode.Open, FileAccess.Read)) { workBook = new HSSFWorkbook(fs); } //mycode workBook.SetSheetName(0, "Report Laundry"); using (FileStream fs = new FileStream(NewPath, FileMode.Create, FileAccess.Write)) { workBook.Write(fs); fs.Close(); } } catch(Exception e) { result = false; MsgError = "Error Exception: " + e.Message; } return Json(new { isuccess = result, messageerror = MsgError,folder = Folder, filesname = FileName, }); } public ActionResult GenerateFiles(string folder, string filesname) { string Msg = "success"; try { byte[] Data = System.IO.File.ReadAllBytes(folder + filesname); string contentType; new FileExtensionContentTypeProvider().TryGetContentType(filesname, out contentType); HttpContext.Response.Clear(); HttpContext.Response.ContentType = contentType; HttpContext.Response.Headers.Add("Content-Length", Convert.ToString(Data.Length)); HttpContext.Response.Headers.Add("Content-Disposition", string.Format("{0};FileName=\"{1}\"", "attachment", filesname)); HttpContext.Response.Headers.Add("Set-Cookie", "fileDownload=true; path=/"); HttpContext.Response.Body.WriteAsync(Data); } catch(Exception e) { Msg = "error Exception : "+e.Message; } System.IO.File.Delete(folder + filesname); return Json(Msg); } [/code] когда я использую следующий код, загрузка прошла успешно, но файл не загружается с сообщением об ошибке «Сбой сети». Это вызвано неправильным написанием кода ответа? Подробнее здесь: [url]https://stackoverflow.com/questions/70753835/download-file-failed-using-response-asp-net-core[/url]