Принудительная загрузка файла на сетевой ресурс через IIS - PullRequest
1 голос
/ 05 октября 2009

Я пишу короткую веб-страницу для контроля доступа к веб-хранилищу аудиофайлов (записи лекций). Аудиофайлы хранятся в сети SAN и доступны с веб-сервера с использованием общего ресурса UNC.

Я хочу, чтобы появилось диалоговое окно «Сохранить», потому что во время тестирования мы обнаружили, что некоторые веб-браузеры очень затрудняют сохранение mp3-файлов. Важно, чтобы наши студенты могли сохранять файл, а не просто слушать его.

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

Сначала я попытался использовать виртуальный каталог на веб-сайте, который аутентифицировался как пользователь домена. Однако, если я открою URL-адрес аудиофайла с помощью моей командной кнопки, веб-браузер может сразу же попытаться воспроизвести его.

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

Даже тогда я все еще не могу достичь желаемой цели, потому что команда stream.LoadFromFile, по-видимому, отказывается читать файл из общего сетевого ресурса. Он выдает ошибку аутентификации, хотя логин домена, который я использую для запуска сайта, имеет полный доступ к этой сетевой папке.

Какие-нибудь рекомендации по альтернативным способам достижения моих целей?

Ответы [ 3 ]

2 голосов
/ 29 марта 2011

Лучше всего добавить следующий заголовок ответа.

Содержание-расположение: вложение; имя файла = fname.ext

см. http://support.microsoft.com/kb/260519 для получения дополнительной информации

2 голосов
/ 05 октября 2009

При возврате файла в браузер установите для mime-типа значение «application / x-unknown» - это заставит браузер запросить загрузку, поскольку он не будет знать, как с ним обращаться.

Существует вероятность того, что браузер прочитает расширение файла и попытается быть умным, но с этим ничего не поделаешь.

0 голосов
/ 05 октября 2009

Мне нравится ответ СК об изменении типа пантомимы (я бы проголосовал, если бы меня оценили). Это поможет избежать проблем с сохранением.

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

         Response.Clear()  
         Response.AddHeader("Content-Disposition", "attachment; filename=" & file.Name)  
         Response.AddHeader("Content-Length", file.Length.ToString())  
         Response.ContentType = "application/octet-stream"  
         Response.WriteFile(file.FullName)  
         Response.End 'if file does not exist  

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

Попробуйте посмотреть полный код здесь - http://www.xefteri.com/articles/show.cfm?id=8

Вы также можете добавить подтверждение авторских прав к проверке перед загрузкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...