Puoi consigliare un controllo FileUpload alternativo per asp.net-mvc?
-
05-07-2019 - |
Domanda
Attualmente utilizza System.Web.UI.WebControls.FileUpload racchiuso nel nostro controllo.
Abbiamo licenze per Telerik. Volevo sapere se qualcuno aveva esperienza con quello o poteva suggerirne uno migliore?
Alcuni criteri da misurare in
- convalida
- peformance
- più file
- localizzazione ( sfoglia è difficile)
- sicurezza
Soluzione
Personalmente, se hai i controlli di Telerik, darei loro una possibilità. Ho scoperto che sono molto utili e l'esperienza dell'utente è buona. Il loro controllo del caricamento è abbastanza carino.
Altri suggerimenti
Ho appena pubblicato questo in un'altra domanda , ma se usi questo controllo ActiveX sarà in grado di elaborare le immagini in modo rapido ed efficiente. Il componente ridimensionerà effettivamente le immagini sul computer client prima di inviarle. Ciò riduce la larghezza di banda non necessaria e trasferisce più immagini contemporaneamente.
Abbiamo esteso FileUploadControl per aggiungere un po 'di validazione. Abbiamo anche scritto il nostro controllo che consente di caricare più file contemporaneamente. Attualmente stiamo valutando entrambi. Speriamo che ne decidiamo uno, odierei avere 2 diversi controlli di upload da mantenere.
Dai un'occhiata al NeatUpload . È fondamentalmente un HttpHandler personalizzato che trasmette i file su disco con un sacco di ulteriore configurabilità. È open source e Dean è una star assoluta per supportare i suoi utenti.
Dai un'occhiata a questo:
Html-5 -Uploader
Trascina e rilascia più file sulla tua pagina web!
Il collegamento non funziona sempre, quindi eccolo di nuovo: http: //www.igloolab .com / jquery-HTML5-uploader /
.
Controller: (modificato dal mio codice originale, spero di non aver dimenticato qualcosa, ma è abbastanza chiaro)
<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
Questa è la vista (non dimenticare i collegamenti a css e 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>
E i miei 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;
}
Potresti provare una soluzione basata su flash che ti consente di visualizzare qualsiasi testo, caselle di testo, pulsanti o qualsiasi altra cosa come parte del tuo controllo di caricamento dei file. Queste soluzioni in genere inseriscono un filmato flash 1x1 sulla pagina che funge da ponte tra javascript e flash in modo tale che javascript possa chiamare dinamicamente la casella di caricamento dei file di flash.
In un recente progetto, ho usato FancyUpload per fare esattamente quello.