Можете ли вы порекомендовать альтернативный элемент управления загрузкой файлов для asp.net-mvc?
-
05-07-2019 - |
Вопрос
В настоящее время используется System.Web.UI.WebControls.Загрузка файлов, завернутых в наш собственный элемент управления.
У нас есть лицензии на Telerik.Я хотел знать, есть ли у кого-нибудь опыт работы с этим или может предложить что-то получше?
Некоторые критерии, которые должны быть измерены с помощью
- валидация
- производительность
- несколько файлов
- локализация (Обзор это сложно)
- Безопасность
Решение
Лично я бы попробовал, если бы у вас были элементы управления Telerik.Я обнаружил, что они очень полезны, а пользовательский интерфейс хорош.Их управление загрузкой довольно приятное.
Другие советы
Я только что написал об этом в другом вопросе, но если вы используете этот элемент управления ActiveX, вы сможете обрабатывать изображения быстро и эффективно.Компонент фактически изменит размер изображений на клиентском компьютере перед их отправкой.Это уменьшает ненужную пропускную способность и позволяет передавать несколько изображений одновременно.
Мы расширили FileUploadControl, чтобы добавить некоторую проверку.Мы также написали наш собственный элемент управления, который позволяет загружать несколько файлов одновременно.В настоящее время мы оцениваем и то, и другое.Надеюсь, мы остановимся на одном, мне бы не хотелось поддерживать 2 разных элемента управления загрузкой.
Посмотри на Дина Бреттла Аккуратная загрузка.По сути, это пользовательский HttpHandler, который передает файлы на диск с множеством дополнительных возможностей настройки.Это открытый исходный код, и Дин - абсолютная звезда за поддержку своих пользователей.
Посмотри на это:
Html-5-ЗагрузчикПеретащите несколько файлов на свою веб-страницу!
Ссылка не всегда работает, так что вот она снова: http://www.igloolab.com/jquery-html5-uploader/
.
Контроллер:(изменено по сравнению с моим исходным кодом, надеюсь, я ничего не забыл, но это довольно ясно)
<HttpPost()> _
Public Function Upload(uploadedFile As System.Web.HttpPostedFileBase) As ActionResult
If uploadedFile IsNot Nothing Then
If uploadedFile.ContentLength > 0 Then
Dim mimeType As String = Nothing
'Upload
Dim PathFileName As String = System.IO.Path.GetFileName(uploadedFile.FileName)
Dim path = System.IO.Path.Combine(Server.MapPath("~/App_Data/Uploads"), PathFileName)
If Not System.IO.Directory.Exists(Path) Then
System.IO.Directory.CreateDirectory(Path)
End If
Dim firstLoop As Boolean = True
uploadedFile.SaveAs(path)
Next
End If
Return Nothing
End Function
Это представление (не забудьте ссылки на css и js ;))
<h1>
@SharedStrings.Upload</h1>
<h2>
@SharedStrings.UploadInformation</h2>
<div id="dropbox">
</div>
<div id="upload">
</div>
<script type="text/javascript">
$(function () {
var fileTemplate = "<div id=\"{{id}}\">"; fileTemplate += "<div class=\"progressbar\"></div>"; fileTemplate += "<div class=\"preview\"></div>"; fileTemplate += "<div class=\"filename\">{{filename}}</div>"; fileTemplate += "</div>"; function slugify(text) { text = text.replace(/[^-a-zA-Z0-9,&\s]+/ig, ''); text = text.replace(/-/gi, "_"); text = text.replace(/\s/gi, "-"); return text; }
$("#dropbox").html5Uploader({ onClientLoadStart: function (e, file) {
var upload = $("#upload"); if (upload.is(":hidden")) { upload.show(); }
upload.append(fileTemplate.replace(/{{id}}/g, slugify(file.name)).replace(/{{filename}}/g, file.name));
}, onClientLoad: function (e, file) { /*$("#" + slugify(file.name)).find(".preview").append("<img src=\"" + e.target.result + "\" alt=\"\">");*/ }, onServerLoadStart: function (e, file) { $("#" + slugify(file.name)).find(".progressbar").progressbar({ value: 0 }); }, onServerProgress: function (e, file) { if (e.lengthComputable) { var percentComplete = (e.loaded / e.total) * 100; $("#" + slugify(file.name)).find(".progressbar").progressbar({ value: percentComplete }); } }, onServerLoad: function (e, file) { $("#" + slugify(file.name)).find(".progressbar").progressbar({ value: 100 }); }
});
});
</script>
И мой css
/*html 5 uploader*/
#dropbox
{
/*picture where people would drag-drop their files to*/
background-image:url(../Images/UploadToMedia.png);
height:128px;
margin-bottom:40px;
margin-left:auto;
margin-right:auto;
background-repeat:no-repeat;
margin-top:0;
width:128px;
}
Вы могли бы попробовать решение на основе flash, которое позволяет вам отображать любой текст, текстовые поля, кнопки или что-либо еще как часть вашего собственного элемента управления загрузкой файлов.Эти решения обычно помещают на страницу флэш-ролик размером 1x1, который действует как связующее звено между javascript и flash, так что javascript может динамически вызывать окно загрузки файла flash.
В недавнем проекте я использовал Модная загрузка чтобы сделать именно это.