2013-03-05 22 views
6

Mam formant ASP.NET FileUpload, który działa poprawnie, dopóki nie zostanie wdrożony. Wtedy działa poprawnie, chyba że plik ma ponad ~ 55kb. Myślę, że ma to coś wspólnego z postbackami i że muszę umieścić je w zmiennej sesji. Mimo to działa dla małych plików.Nie można uzyskać dostępu do zamkniętego pliku

Czy może być ograniczeniem tego, jak duża może być zmienna sesji? Ale działa podczas uruchamiania z mojego IDE, więc nie jestem pewien.

System.ObjectDisposedException: nie można uzyskać dostępu do zamkniętej plikowi

Dzięki za wszelkie przewody.

Odpowiedz

7

Problem ten można rozwiązać poprzez nadanie DiskBufferSize w pliku web.config:

<system.web> 
    <httpRuntime executionTimeout="90" maxRequestLength="20000" useFullyQualifiedRedirectUrl="false" requestLengthDiskThreshold="8192"/> 
</system.web> 

za Cannot access a closed file

2

Zrobiłem kilka testów tego, i wydaje się, że ustawienie DiskBufferSize dzieje wokół problemu poprzez wyłączenie buforowanie. Teraz komputer zużyje więcej pamięci. Buforowanie jest skutecznie wyłączone. a zyski z osiągnięć, które otrzymujesz, zniknęły.

Uważam, że poprawną rozdzielczością jest użycie metody SaveAs, aby zapisać wysłany plik do folderu tymczasowego na PIERWSZY odświeżenie i zapisać ścieżkę pliku do pliku tymczasowego w widoku stanu lub sesji.

Po każdym ponownym przesłaniu lub przekierowaniu, szczególnie w przypadku asynchronicznych wątków funkcja SaveAs nie będzie działała, jeśli wymagane jest buforowanie; pojawi się błąd "Nie można uzyskać dostępu do zamkniętego pliku".

Nie wiem, co umieściłeś w swojej "zmiennej sesji", ale domyślam się, że to kontrola plików, która jest problemem.

Rozwiązało to problem dla mnie, na wypadek, gdyby inni zaczęli to robić, ale nie chcą wyłączać buforowania.

+0

Dzięki! To jest znacznie lepsza odpowiedź architektonicznie. – Carling

Powiązane problemy