简体   繁体   English

Ajax 无法从数据库中检索大文件

[英]Ajax doesn't work by retrieving big file from database

By retrieving file more than 0.5MB from SQL database ajax falls into error every time, what am I doing wrong here?通过从 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>');
   }

my controller:我的 controller:

//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 };
    }

with small files it works perfectley, but why it falls down by retriving file more than 0,5MB?对于小文件,它可以完美地工作,但是为什么它会因检索超过 0,5MB 的文件而崩溃? message, what I'm reciving:消息,我收到了什么:

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}

I think you should:我觉得你应该:

Your Controller: you should return with binary ||您的 Controller:您应该返回二进制 || file Stream文件 Stream

//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 };
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM