В настоящее время я разрабатываю приложение для клиента, которое будет использовать панель администрирования для загрузки изображений в галерею изображений и некоторых других отсканированных документов в базу данных. Я успешно написал действие контроллера для сохранения и получения файлов, сохраненных в базе данных.
Теперь я застрял на том, как отображать индикатор выполнения при загрузке файла в базу данных. Я пробовал несколько элементов управления, таких как JQuery Uploadify и некоторые другие. Все они успешно сохраняют файл в папку, хотя и не загружают его в базу данных MS-SQL.
Вот образец моей модели:
public Class myImages
{
[Key, Required]
public string ImageID { get; set; }
[Required, MaxLength(100), DisplayName("Image Title:")]
public string ImageTitle { get; set; }
[DisplayName("Image File:")]
public byte[] ImageData { get; set; }
public string ImageContentType { get; set; }
}
Я создал в инфраструктуре функцию для возврата байтового массива загруженного файла, вот код:
public byte[] uploadedFileToByteArray(HttpPostedFileBase file)
{
int nFileLen = file.ContentLength;
byte[] result = new byte[nFileLen];
file.InputStream.Read(result, 0, nFileLen);
return result;
}
... А вот управляющее действие для создания
[HttpPost, ValidateInput(false), ValidateAntiForgeryToken]
public ActionResult Create(myImage myimage)
{
if (ModelState.IsValid)
{
myimage.ImageID = DateTime.Now.Ticks.ToString();
myimage.ImageData = uploadedFileToByteArray(Request.Files[0]);
myimage.ImageContentType = Request.Files[0].ContentType;
db.Pictures.Add(picture);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(picture);
}
Как я уже сказал, приведенный выше код работает отлично, увы, я не могу заставить работать индикатор выполнения во время загрузки файла. Есть идеи как это сделать?
Я также попытался загрузить файл во временную папку и затем прочитать байты этого файла, затем загрузить на SQL Server, этот подход работает, но по какой-то причине мой клиент этого не хочет, и я также не удовлетворен с этим решением.
Я также заметил, что при загрузке файла Google Chrome показывает процент загрузки, если браузер может получить доступ к данным на стороне клиента, есть ли способ доступа к загруженным / отправленным байтам через jQuery или Ajax для отображения прогресса бар при загрузке?
Я использую Visual Studio 2010, ASP.NET, MVC 3.