Хранение временных пользовательских файлов в ASP.NET на уровне среднего доверия

StackOverflow https://stackoverflow.com/questions/271944

  •  07-07-2019
  •  | 
  •  

Вопрос

У меня есть сценарий, в котором пользователи моего веб-приложения отправляют отзывы, состоящие из текстовой информации и изображений. ASP.NET веб-приложение отправляет отзывы, состоящие из текстовой информации и изображений.Процесс отправки состоит из следующих шагов:

  • Сначала пользователь вводит содержимое и выбирает путь к изображению
  • Когда он нажимает предварительный просмотр, информация снова отображается, чтобы он мог подтвердить
  • После подтверждения информация сохраняется в базе данных

Проблема с этим заключается в том, что я не хочу сохранять загруженные изображения в базе данных до фактического подтверждения пользователем.Вместо этого я сохраняю их как временные файлы и помещаю в базу данных только после окончательного подтверждения.

Поскольку я также хочу, чтобы мое приложение запускалось со средним уровнем доверия, у меня есть разрешения на запись только в каталог приложения и нигде за его пределами.Я даже хочу ограничить права на запись для пользователя ASPNET / NETWORK SERVICE папкой ~/App_Data.Проблема с моим сценарием заключается в том, что после создания временного файла в этой папке пул приложений перерабатывается, а я не хочу, чтобы это происходило при каждой отправке отзыва.

Как вы советуете мне сохранить эти временные файлы вместо этого?Пул не перезапускается, если я обновляю файл - только при создании или переименовании.Но я не думаю, что смогу хранить целые изображения в одном файле для всех пользователей.А ты как думаешь?

Обновить:Я должен отметить, что я использую сторонний элемент управления для загрузки.Это дает мне программный доступ к двоичному потоку содержимого файла после загрузки, но я не могу сохранить это после второй обратной передачи (первый шаг и обратная передача фактически выполняют загрузку).

Это было полезно?

Решение

Я бы порекомендовал Изолированное хранилище.Это своего рода виртуальная папка.

Вот выдержка из пример в CodeProject:

IsolatedStorageFileStream stream = 
  new IsolatedStorageFileStream(ISOLATED_FILE_NAME, 
  FileMode.Create, isoStore);

StreamWriter writer = new StreamWriter( stream );
writer.WriteLine( "This is my first line in the isolated storage file." );
writer.WriteLine( "This is second line." );
writer.Close();

Обновить:Чтобы очистить ваш файл, просто сделайте это:

string fileName = "isolatestorage.txt";

IsolatedStorageFile storage = IsolatedStorageFile.GetStore(
    IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);

string[] files = storage.GetFileNames(fileName);
foreach(string file in files) {
    if(file == fileName) {
        storage.DeleteFile(file);
        break;
    }
}

Другие советы

Файл web_mediumtrust.config по умолчанию, поставляемый Microsoft, заведомо непрактичен.

Вот фрагмент из файла web_mediumtrust.config по умолчанию.По умолчанию вы не можете использовать System.Ввод-вывод для обнаружения или записи во временную папку.

                        <IPermission
                                class="FileIOPermission"
                                version="1"
                                Read="$AppDir$"
                                Write="$AppDir$"
                                Append="$AppDir$"
                                PathDiscovery="$AppDir$"
                        />

Хотя у меня не было опыта работы с Изолированным хранилищем, как упоминалось @Seb, похоже, это разрешено конфигурационным файлом по умолчанию.

Вы все еще можете использовать обычный Path.GetTempFilename() способ получения временного файла в ASP.NET сценариях.

Он должен указать вам путь к временному файлу, который доступен для записи с помощью NETWORK_SERVICE, но также находится в одной из реальных временных папок Windows, а не в папке вашего приложения.

Если ваш хост правильно настроил свой сервер, это должно работать нормально.

Это ответ Леппи, которая прокомментировала мой вопрос (чтобы избежать ограничения на количество символов)

От: http://blogs.msdn.com/johan/archive/2007/05/16/common-reasons-why-your-application-pool-may-unexpectedly-recycle.aspx

...иногда ваш пул приложений необъяснимым образом перерабатывается без видимой причины.Обычно это проблема конфигурации или связано с тем, что вы выполняете операции с файловой системой в каталоге приложения.

Вы уверены, что его не нужно перерабатывать?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top