Descărcați fișierul și încărcați cu httphandler sau descărcați - încărcați

Recent, a trebuit să pun în aplicare posibilitatea de a încărca fișiere de dimensiuni mari pe server și de a descărca acest fișier către utilizator. Am decis să o fac cu HttpHandler. Principiul de bază al utilizării IHttpHandler este foarte simplu, dar există unele nuanțe.







Selectați tipul de mesaj

Când dați utilizatorului un fișier pentru încărcare, este afișată o casetă de dialog. Fereastra are butoanele "Deschidere", "Salvare" și "Anulare". Dacă doriți să aveți un alt dialog "Salvare" în locul acestor butoane, ar trebui să utilizați:

Și ce este ContentType?

În timpul formării răspunsului de la server, nu este important în ce context se aplică API-ul Web, HttpHandler, HttpModule sau chiar simplu ActionResult sau chiar WebForms, este necesar să se precizeze tipul de conținut returnat. Vă ofer o funcție de ajutor.

În opinia mea, această metodă utilă vă poate economisi mult timp, este bine că o folosesc adesea eu însumi.

Exemplu de utilizare

Pe un exemplu simplu, vă arăt cum puteți utiliza această metodă. Să presupunem că am un proiect WebForms. Un fișier (word.doc) este încărcat pe o singură pagină. Lăsați metoda Page_Load să apeleze procedura mea privată DownloadFile ():

În linia 10, se numește metoda de ajutor, care prin extensie stabilește tipul "corect" al conținutului returnat.







Response.TransmitFile () vs Response.WriteFile ()

Câteva cuvinte despre linia 12 a listei anterioare. Există două moduri de a "da" utilizatorului un fișier. Alegi ce să folosești.

Metoda TransmitFile () trimite un fișier clientului fără a încărca acest fișier în memoria serverului (memoria aplicației). Aceasta este o soluție mai potrivită pentru descărcarea fișierelor mari.

WriteFile () - metoda încarcă fișierul în memoria serverului înainte de a îl trimite clientului. Această metodă este mai preferabilă atunci când descărcați fișiere mici și mijlocii.

Cu descărcarea de fișiere mari nu este nimic complicat. Pentru a nu fi neîntemeiat, voi da un exemplu de încărcare a fișierelor sau, mai degrabă, a imaginilor pe server. Am folosit acest HttpHandler pentru a încărca imagini pe server de la aplicația Silverlight.

Astfel, în linia a 14-a reiese că clientului i sa spus că acea parte a fișierului a fost salvată cu succes, ceea ce înseamnă că puteți trimite următorul.

Singurul lucru care trebuie menționat este că dimensiunea maximă permisă a fișierului pentru încărcarea pe server poate fi setată în fișierul de configurare (web.config):

Și dacă este complet sincer, în momentul de față există o mulțime de componente gratuite și controale de la terțe părți care sunt cât mai simple posibil și ajută la rezolvarea acestei probleme. De exemplu, AjaxControlToolkit.

Faptul este că folosind asp.net direct (fără fragmentarea prealabilă și procesarea acestuia), un fișier mare nu va fi încărcat pe server, în timp ce altele (care nu aspnet :)) permit acest lucru, după părerea mea a fost posibil doar prin intermediul unui brazier să umple un dosar mare. Da, înțeleg deficiențele - că dacă în final conexiunea are loc, apoi din nou și așa mai departe. - dar încă.

Prin urmare, opțiunea este de a utiliza modulele native terță parte pentru a iis, care permit procesarea fluxului de intrare fără al forța în memorie

Dacă nu este corect, corect.

Knockout: Creați un câmp cu înlocuire automată sau Autocompleți pe knockout-uri







Trimiteți-le prietenilor: