Загрузка файлов в браузере Android 3.0 с моего сайта ASP.NET сайт

#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.

Вскоре я добавлю примеры кода.