Ajax 不能通过从数据库中检索大文件来工作
Posted
技术标签:
【中文标题】Ajax 不能通过从数据库中检索大文件来工作【英文标题】:Ajax doesn't work by retrieving big file from database 【发布时间】:2020-12-01 09:47:04 【问题描述】:每次从 SQL 数据库 ajax 中检索超过 0.5MB 的文件都会出错,我在这里做错了什么?
$(document).ready(function ()
loadFileData();
);
function loadFileData()
$.ajax(
type: "GET",
url: "/File/FileIndex",
dataType: "JSON",
success: function (data)
$.each(data, function (i, val)
var trow = $('<tr/>').data("id", val.id);
var trowa = $('<tr/>');
var trowb = $('<tr/>').data("id", val.id);
trow.append('<td colspan="2"><a href="#" class="FileDownload">' + escape(val.Name) +'</a></td>');
trowa.append('<td><input type="file" id="FileUpload" /></form></td>');
trowb.append('<td><input type="button" class="btnUpload" value="Upload File" /><input type="button" id="btnClear" value="Clear" /></td>');
tab.append(trow);
tab.append(trowa);
tab.append(trowb);
);
$("#showFiles").html(tab);
,
error: function (error)
alert("Failed! Please try again." + error);
);
var tab = $('<table style="width:100px" border=1 class=MyTable></table>');
我的控制器:
//GET: File
public JsonResult FileIndex()
List<tblFile> fileList = new List<tblFile>();
using (FileDBEntities db = new FileDBEntities())
fileList = db.tblFiles.ToList();
return new JsonResult Data = fileList, JsonRequestBehavior = JsonRequestBehavior.AllowGet ;
对于小文件,它可以完美运行,但为什么它会因检索超过 0.5MB 的文件而崩溃? 消息,我收到了什么:
function()if(a)var t=a.length;(function r(t)v.each(t,function(t,n)var i=v.type(n);i==="function"?
(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)))(arguments),i?o=a.length:n&&(s=t,l(n))return this
【问题讨论】:
错误是什么? 如何查看? 这仅发生在生产环境中还是您可以在开发环境中重现它?如果您可以在开发环境中重现它,则可以使用调试器查看错误(以及可能的其他有用信息)。如果您还没有学会如何使用调试器,那应该是您的下一个任务。 是的,我应该,但我不明白为什么它适用于小文件? 我可以在控制台中看到以下错误:1. GET localhost:44395/resources/demos/style.css net::ERR_ABORTED 404 2. bootstrap.js:15 未捕获错误:Bootstrap 的 javascript 需要 jQuery 版本 1.9.1 或更高版本, 但低于版本 4 3.GET localhost:44395/File/FileIndex 500 【参考方案1】:我认为你应该:
你的控制器:你应该返回二进制 ||文件流
//GET: File
public JsonResult FileIndex()
List<byte> fileList = new List<byte>();
using (FileDBEntities db = new FileDBEntities())
fileList = db.tblFiles.ToList();
foreach(var itemFile in fileList)
fileList.add(File.ReadAllBytes(itemFile));
return new JsonResult Data = fileList, JsonRequestBehavior = JsonRequestBehavior.AllowGet ;
【讨论】:
有2个错误:“文件”在当前比赛中无效,不能隐式转换类型 第一个错误属于 fileList = db.tblFiles.ToList();第二个到 fileList.add(File.ReadAllBytes(itemFile));以上是关于Ajax 不能通过从数据库中检索大文件来工作的主要内容,如果未能解决你的问题,请参考以下文章
HandsonTable 通过从 ajax 加载对数据进行排序