Streamen von hochgeladenen fileen direkt in eine databasetabelle

Ich habe mehrere Anwendungen, die es Benutzern ermöglichen, Anhänge hochzuladen, die in einer databasetabelle gespeichert sind. Das hat seit einigen Jahren gut funktioniert, weil es ursprünglich für kleine imagedateien gedacht war, aber jetzt wollen sie sehr große fileen upload (~ 80MB). Dies führt dazu, dass der server aus dem memory läuft (und der Upload zum Ausfall), weil ich, um die Binärdaten in eine database zu schreiben, den gesamten Inhalt in ein Byte-Array geladen habe. Viele, wenn nicht die meisten, Online-Beispiele für file-Uploads verwenden diese Methode (siehe http://www.aspnettutorials.com/tutorials/database/Save-Img-ToDB-Csharp.aspx als Beispiel).

Nun, die Frage ist, kann ich irgendwie den binären Inhalt in die database streamen, anstatt den gesamten Inhalt in ein Byte-Array zu laden und dann das Byte-Array als parametrisierten Wert zu setzen? Das Umschalten auf dateibasierte statt datenbankbasierte memoryung wäre zu diesem timepunkt eine große Sache …

Vielleicht kann dieser Artikel Sie in die richtige Richtung weisen.

Sie geben nicht viel Informationen über die Umgebung, die Sie verwenden, außer den Tags, die Sie an Ihren Beitrag angeschlossen haben.

Was Sie tun sollten, ist die Streaming-functionen Ihres database-servers (und die Verbindungsschicht, die Sie verwenden), um die data über einen Stream zu senden.

Es scheint, dass nur seekable Streams unterstützt werden, also solltest du die uploadde file zuerst in eine temporäre file schreiben (mit Streams verwenden, die file nicht im memory puffern) und dann mit einem FileStream die file in die database insert.

Sie benötigen eine Client-Anwendung (Silverlight, Java Applet, Flash, etc.), die Ihre file in kleinen Brocken brechen und an den server senden.

Auf dem server musst du deine database anrufen und diese Chips speichern; In meinen Tests kam die beste performance von UPDATETEXT

Beachten Sie, dass Sie etwas ähnliches tun müssen, um filedownloads bereitzustellen. Ich schlage vor, über READTEXT function zu lesen, ziemlich gleich wie UPDATETEXT , und es in einem IHttpAsyncHandler

Ich glaube nicht, dass es praktisch wäre, fileen zu speichern, die groß in einer database sind, vor allem durch das Hochladen (ich gehe davon aus, dass der Upload über einen Browser erfolgt.)

Mindestens möchten Sie die file in einen Hold-Ordner auf dem server upload und in die database verschieben, sobald sie vollständig hochgeladen wurde. Andernfalls müssten Sie herausfinden, wie man den Bytestream in die database mit mehreren Updates zu streichen. Ich glaube nicht, dass du an einen BLOB anhängen kannst.

UPDATE : Es sieht so aus, als hätte ich mich vielleicht falsch verstanden. SQL server unterstützt UPDATETEXT .

Ich denke immer noch das Hochladen von fileen, die groß und "streaming" sie in die database ist zerbrechlich und stellt zuverlässige Probleme.