如何使用 AJAX 从 MVC 中的数据库中检索 "big" 文件
How to retrieve "big" file from database in MVC with AJAX
将超过 0.5MB 的文件上传到 SQL 数据库后,我的 AJAX 调用出现错误:
函数(){if(a){var t=a.length;(函数r(t){v.each(t,函数(t,n){var i=v.type(n );i==="函数"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!==" string"&&r(n)})})(参数),i?o=a.length:n&&(s=t,l(n))}return this}
有人能告诉我我做错了什么以及如何在 UI 中显示文件名吗?
我的AJAX:
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">' + 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 (err) {
alert("Failed! Please try again." + err.error);
}
});
}
我的控制器:
[HttpPost]
public JsonResult UpdateJsionFile(int? id, HttpPostedFileBase file)
{
byte[] bytes;
//decimal fileSize = 100;
var supportedTypes = new[] { "txt","doc","docx","pdf", "xls", "xlsx", "png" };
var fileExt = System.IO.Path.GetExtension(file.FileName).ToLower().Substring(1);
using (BinaryReader br = new BinaryReader(file.InputStream))
{
bytes = br.ReadBytes(file.ContentLength);
}
if(!supportedTypes.Contains(fileExt))
{
return Json(new { success = false, error = "File extention is invalid - upload only WORD/PDF/EXCEL/TXT/PNG files" }, JsonRequestBehavior.AllowGet);
}
if(file.FileName.Length>50 )
{
return Json(new { success = false, error = "File name is too long, max. 50 symbols" }, JsonRequestBehavior.AllowGet);
}
if (file.ContentLength > 4096)
{
return Json(new { success = false, error = "File size is too big, max 10MB" }, JsonRequestBehavior.AllowGet);
}
using (FileDBEntities db = new FileDBEntities())
{
tblFile f = db.tblFiles.Where(p => p.id == id).FirstOrDefault();
f.Name = Path.GetFileName(file.FileName);
f.ContentType = file.ContentType;
f.Data = bytes;
db.SaveChanges();
}
return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
“小”文件没有错误。奇怪的是,使用普通的剃刀代码它工作正常...
下载或上传时是否出现问题?如果在上传时,您可以在 web.config:
中增加 maxRequestLength
此外,由于 JSON 长度限制:
我是这样解决的:
public JsonResult FileIndex()
{
List<tblFile> fileList = new List<tblFile>();
using (FileDBEntities db = new FileDBEntities())
{
fileList = db.tblFiles.ToList();
}
var jsonResult = Json(fileList, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;
return jsonResult;
}
将超过 0.5MB 的文件上传到 SQL 数据库后,我的 AJAX 调用出现错误: 函数(){if(a){var t=a.length;(函数r(t){v.each(t,函数(t,n){var i=v.type(n );i==="函数"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!==" string"&&r(n)})})(参数),i?o=a.length:n&&(s=t,l(n))}return this}
有人能告诉我我做错了什么以及如何在 UI 中显示文件名吗?
我的AJAX:
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">' + 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 (err) {
alert("Failed! Please try again." + err.error);
}
});
}
我的控制器:
[HttpPost]
public JsonResult UpdateJsionFile(int? id, HttpPostedFileBase file)
{
byte[] bytes;
//decimal fileSize = 100;
var supportedTypes = new[] { "txt","doc","docx","pdf", "xls", "xlsx", "png" };
var fileExt = System.IO.Path.GetExtension(file.FileName).ToLower().Substring(1);
using (BinaryReader br = new BinaryReader(file.InputStream))
{
bytes = br.ReadBytes(file.ContentLength);
}
if(!supportedTypes.Contains(fileExt))
{
return Json(new { success = false, error = "File extention is invalid - upload only WORD/PDF/EXCEL/TXT/PNG files" }, JsonRequestBehavior.AllowGet);
}
if(file.FileName.Length>50 )
{
return Json(new { success = false, error = "File name is too long, max. 50 symbols" }, JsonRequestBehavior.AllowGet);
}
if (file.ContentLength > 4096)
{
return Json(new { success = false, error = "File size is too big, max 10MB" }, JsonRequestBehavior.AllowGet);
}
using (FileDBEntities db = new FileDBEntities())
{
tblFile f = db.tblFiles.Where(p => p.id == id).FirstOrDefault();
f.Name = Path.GetFileName(file.FileName);
f.ContentType = file.ContentType;
f.Data = bytes;
db.SaveChanges();
}
return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
“小”文件没有错误。奇怪的是,使用普通的剃刀代码它工作正常...
下载或上传时是否出现问题?如果在上传时,您可以在 web.config:
中增加 maxRequestLength此外,由于 JSON 长度限制:
我是这样解决的:
public JsonResult FileIndex()
{
List<tblFile> fileList = new List<tblFile>();
using (FileDBEntities db = new FileDBEntities())
{
fileList = db.tblFiles.ToList();
}
var jsonResult = Json(fileList, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;
return jsonResult;
}