Krajee загрузочный файл-вход с бритвой Mvc
Я хочу использовать Krajee bootstrap-fileinput ( http://plugins.krajee.com/file-input) с бритвой Mvc. Пожалуйста, помогите мне с процессом загрузки изображений на сервер, и результат json будет получен из actionResult.
Я только что включил необходимые файлы js и css на страницу просмотра и добавил строку
<input id="input-702" name="kartik-input-702[]" type="file" multiple="true" class="file-loading">
и сценарий
$("#input-702").fileinput({
uploadUrl:"@Url.Action("upload","Home")",
uploadAsync: true,
minFileCount: 1,
maxFileCount: 5,
overwriteInitial: false,
initialPreview: "",
initialPreviewConfig:"",
uploadExtraData: ""
});
Эта строка форматируется и показывает эффект перетаскивания и выбора кнопки "Файл". Выбор файла и создание миниатюр работают правильно, но при загрузке есть функция (fileinput, js) "ajaxSubmit", которая используется для публикации содержимого в HomeController. ActionResult "Загрузить".
ajaxSubmit: function (fnBefore, fnSuccess, fnComplete, fnError) {
var self = this, settings;
self.uploadExtra();
settings = $.extend({
xhr: function () {
var xhrobj = $.ajaxSettings.xhr();
return self.initXhr(xhrobj, 98);
},
url: self.uploadUrl,
type: 'POST',
dataType: 'json',
data: self.formdata,
cache: false,
processData: false,
contentType: false,
beforeSend: fnBefore,
success: fnSuccess,
complete: fnComplete,
error: fnError
}, self.ajaxSettings);
self.ajaxRequests.push($.ajax(settings));
},
Теперь я хочу сохранить на сервере все файлы, которые не были загружены с помощью ActionResult и передать значение обратно в js. как извлечь формданные и обработать.??
2 ответа
Я пытался найти решение вышеупомянутой проблемы и наконец нашел тот. Так как я могу сохранить файл на сервере на контроллере, но, к сожалению, я не смог отправить ответ json с контроллера на javascript.
Сохранение изображения с помощью действия контроллера:
[HttpPost]
public ActionResult upload()
{
foreach (string item in Request.Files)
{
HttpPostedFileBase file = Request.Files[item] as HttpPostedFileBase;
string fileName = file.FileName;
string UploadPath = "~/Images/";
if (file.ContentLength == 0)
continue;
if (file.ContentLength > 0)
{
string path = Path.Combine(HttpContext.Request.MapPath(UploadPath), fileName);
string extension = Path.GetExtension(file.FileName);
file.SaveAs(path);
}
}
return Json("");
}
Для реализации кнопки удаления мы должны отправить данные с сервера в асинхронном режиме как объект массива json, например.
initialPreview: [
'<img src='/images/desert.jpg' class='file-preview-image' alt='Desert' title='Desert'>',
],
initialPreviewConfig: [
{
caption: 'desert.jpg',
width: '120px',
url: '/localhost/avatar/delete',
key: 100,
extra: {id: 100}
}
]
Кто-нибудь может мне помочь создать объект массива json в контроллере и отправить его в качестве объекта ответа.???
У меня похожая проблема. Работает (с вызовами ajax), но всегда получает один файл в запросе (тогда как мне нужно получить несколько, но должно работать для вас!)
Мой код выглядит следующим образом: HTML:
<input id="input-id" type="file" data-preview-file-type="text" name="fileUpload[]" multiple class="file-loading" />
JS:
$("#input-id").fileinput(
{
uploadUrl: "/Galleries/Upload",
uploadAsync: true,
maxFileCount: 5
});
MVC контроллер, который я ожидал бы работать, но я не:
[HttpPost]
public JsonResult Upload(IEnumerable<HttpPostedFileBase> fileUpload)
{
//somde logic
}
Однако когда в стороне метод я буду вызывать:
Request.Files
Мой scenerio - это пользователь:
- нажимает на "обзор"
- выбирает картинку и может видеть ее в превью
- нажмите "Обзор" еще раз
- выбирает изображение, и изображение добавляется в текущий список предварительного просмотра
- щелкает загрузка и я получаю все файлы в контроллере
Единственный способ понять, как это может работать - это переключение вызова ajax на плагине, который позволяет добавить список предварительного просмотра. К сожалению, я не могу передать все изображения на контроллер.