#c# #android
#c# #Android
Вопрос:
У меня возникла проблема с загрузкой PDF-файла из моего пользовательского asp.net сайт в готовом браузере на планшете Android (Motorola Xoom).
Я использую Response.Поток вывода.Напишите, чтобы отправить файл, потому что ему приходится читать файл по пути UNC. Этот метод работает в IE, Firefox, Safari и на iPad, но не работает в браузере на Xoom. Однако, когда я загрузил Firefox на Xoom, я смог загрузить файл просто отлично.
Я нашел пару мест, предлагающих использовать следующие заголовки: Content-Type: application / octet-stream Content-Disposition: вложение; filename=»MyFileName.PDF»
Я пробовал это, но безуспешно. Я также пробовал использовать типы содержимого application / pdf и application / force-download и каждую комбинацию имени файла с заглавной буквы, расширения с заглавной буквы, расширения в нижнем регистре, двойные кавычки, одинарные кавычки, без кавычек и т.д. Для размещения содержимого и пока не нашел ничего, что работает.
Я также обнаружил, что если я выполняю код для загрузки файла на Page_Load, он может загружаться, но если я выполняю обратную отправку, а затем выполняю код (щелчок по кнопке ссылки для загрузки файла), это не работает
Кто-нибудь смог загрузить файл, используя пользовательский код C # в браузере OOTB Android 3.0?
Комментарии:
1. У меня аналогичная проблема. Та же проблема. Проблема возникает только в том случае, если я загружаю файл по ссылке UNC. Мы используем Response. Двоичная запись после сериализации файла в виде байта[]. Это отлично работает для локального файла, но когда мы получаем ByteArray из нашего файлового прокси (чтение, каталог UNC), внезапно происходит сбой «Загрузки».
2. Можете ли вы загрузить PDF-файл с помощью эмулятора Android?
3. Отправляет ли веб-сервер содержимое gzip’d? Попробуйте отключить это и посмотреть, вносит ли это какие-либо изменения. (Иногда вы можете случайно выполнить двойное кодирование или закодировать в немного другом формате, и некоторые браузеры справляются с этим лучше, чем другие.)
Ответ №1:
Это устарело, но на случай, если кто-нибудь столкнется с этой проблемой:
Проверьте неизвестные источники в разделе Настройки -> приложения.
Убедитесь, что у вас есть PDF, определенный в MIME-типах (application / pdf) на сервере IIS.
Также, если вы используете обработчик файлов, вам нужно будет установить информацию о заголовке.
Этот блок кода является примером того, что будет использоваться в обработчике файлов:
string dirpath = System.Configuration.ConfigurationManager.AppSettings["FilePath"];
string file = System.Configuration.ConfigurationManager.AppSettings["FileName"];
System.IO.FileInfo fi = new System.IO.FileInfo(dirpath file);
string contentlen = fi.Length.ToString();
context.Response.Buffer = true;
context.Response.Clear();
context.Response.AddHeader("content-disposition", "attachment; filename=" file);
context.Response.AddHeader("content-length", contentlen);
context.Response.ContentType = "application/pdf";
try
{
context.Response.WriteFile(dirpath file);
}
catch (Exception)
{
context.Response.Redirect("Error.aspx");
}
Ответ №2:
Я понятия не имею, почему это происходит, но если вы можете загрузить файл внутри Page_Load
блока, обходным путем будет ссылка на специальную страницу для загрузки, где вы вызываете функцию загрузки внутри Page_Load
блока.
Чтобы сделать это более совместимым с остальной частью вашего веб-сайта (при необходимости), вы могли бы передавать разные параметры на страницу для загрузки разных файлов или перенаправлять на эту страницу, только если вы обнаружите, что сайт запущен в браузере Android.
Вскоре я добавлю примеры кода.