2009-03-28 7 views
19

Ich brauche eine Möglichkeit, große Dateien (600 MB bis 4 GB) in einer asp.net mvc-Website hochzuladen. Derzeit verwende ich swfupload; es funktioniert gut genug, aber es ist ein großer Hit auf dem Webserver, weil es es in einem großen Upload sendet, und ich muss es in der web.config festlegen, um diese riesige Datei zu ermöglichen, was ein großes Sicherheitsrisiko darstellt. In der Vergangenheit, als ich Web Forms Entwicklung machte, benutzte ich Neatupload, die die Datei in Stücke aufteilt und sie einzeln hochlädt. Ich bin auf der Suche nach einer Möglichkeit, große Dateien in mvc hochzuladen, die durch chunking hochladen. Irgendwelche Ideen, wie ich das machen könnte?Große Datei auf asp.net MVC hochladen

Antwort

8
+0

Danke Kumpel, das ist, was ich gesucht habe –

+1

Nur so jemand diesen Besuch weiß. Ich habe das etwas modifiziert und benutze es jetzt. swfupload gab mir zu viele Probleme, sobald die Dateien über 1GB gingen – Solmead

1

Können Sie etwas Ähnliches wie in this link beschrieben? Ich sehe nicht, warum das in ASP.NET MVC nicht funktionieren würde.

+0

URL ist tot für mich –

7

ich landete mit Darren Johnstone's ASP.NET File Upload Module das Hochladen auf der Serverseite zu behandeln. Obwohl ich es leicht modifiziert habe, so dass es eine Guid in der Querystring nehmen könnte, würde es die temporäre Datei zu diesem Guid-Namen speichern.

Es war nett, weil es die Datei speicherte, als es auf dem Server ankam, und die Datei aus den geposteten Daten entfernte, die es dann an die Aktion auf dem Controller sendet, der angegeben wurde.

+0

Wie haben Sie es in ASP.NET MVC ohne die runat = Server-Steuerelemente arbeiten? Gibt es Punch-In-Punkte in den verbleibenden Klassen? Würde es Ihnen etwas ausmachen, ein Codebeispiel zu teilen? –

+1

Das Upload - Modul enthält 2 Teile, der erste ist ein httpandler, der beim Speichern einer Datei (mit Mime - Encoding) die Datei direkt aus dem Speicher löscht und dann die aufgerufene Seite/den Controller aufrufen lässt Dateien [] Array leer. Der zweite Teil ist die Steuerelemente für Standard-ASP.net-Formulare verwendet. Ich habe diese Kontrollen überhaupt nicht benutzt. Stattdessen habe ich den swfupload verwendet, den ich in der ursprünglichen Frage verlinkt habe, der js und flash verwendet, um eine Datei hochzuladen. Ich hatte dann einen Aktionsaufruf "UploadAsync" auf einem Controller, für den der swfupload konfiguriert wurde. – Solmead

+0

Könnten Sie bitte ein Codebeispiel freigeben? Danke –

2

Beispiel aus meiner Sicht:

<input id="FileGUID" name="FileGUID" type="hidden" value="f632c00b-9b66-4716-8075-79df63b780fb" /> 
    <input type="file" id="FileUpload1" name="fileUpload1" /> 

    <script type="text/javascript"> 
     var UploadUrl = '/Video/AsyncUpload?FileGUID=f632c00b-9b66-4716-8075-79df63b780fb'; 
     $(function() { 
      $("#FileUpload1").makeAsyncUploader({ 
       upload_url: UploadUrl, 
       flash_url: '/Content/Flash/swfupload.swf', 
       button_image_url: '/Content/Images/blank-button.png', 
       button_text: '<font face="Helvetica, Arial" size="13pt" color="#ffffff">Upload File</font>', 
       disableDuringUpload: 'input[type="submit"]', 
       file_size_limit: '8024 MB', 
       button_text_top_padding: 2 
      }); 
     }); 
    </script> 

Dann in der eigentlichen speichern Aktion für diese Seite, die mich für eine Datei suchen, wo die asyncupload Aktion hat die Datei auf dem FileGUID basierend gespeichert würde

1

A SignalR Implementierung Beispiel kann here gefunden werden.

Hier finden Sie auch Funktionen zum Arbeiten mit HttpContext.Request.GetBufferlessInputStream(), mit denen Sie mit den Postdaten arbeiten können, bevor sie vollständig hochgeladen wurden.

+0

Der von Ihnen angegebene Link ist tot. –

+0

Ich habe den Link ersetzt – gb2d