Ошибка загрузки .apk с сайта Asp.net с использованием браузера Android

На моей странице .aspx меня есть кнопка загрузки, в которой onclick загружает файл .apk .

Когда я запускаю на своем компьютере, он отлично работает .apk файл загружается на мой компьютер .
Но когда я использую свой телефон для Android, перейдите на этот сайт и нажмите кнопку загрузки, и он начнет загрузку, но щелчок файла даст ошибку. Проблема заключается в разборе пакета.

Также фактический размер файла составляет 604kb (при загрузке с телефона andorid вы получаете 22kb )

Загруженный файл (22kb) содержит содержимое html.

  private void DownloadFile() { string getPath = "demo_Android/demoAndroid.apk"; System.IO.Stream iStream = null; // Buffer to read 10K bytes in chunk: byte[] buffer = new Byte[1024]; // Length of the file: int length; // Total bytes to read: long dataToRead; // Identify the file to download including its path. string filepath = Server.MapPath(getPath); // Identify the file name. string filename = System.IO.Path.GetFileName(filepath); try { // Open the file. iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read); // Total bytes to read: dataToRead = iStream.Length; Response.ContentType = "application/vnd.android.package-archive"; Response.AddHeader("Content-Disposition", "attachment; filename=" + filename); // Read the bytes. while (dataToRead > 0) { // Verify that the client is connected. if (Response.IsClientConnected) { // Read the data in buffer. length = iStream.Read(buffer, 0, 1024); // Write the data to the current output stream. Response.OutputStream.Write(buffer, 0, length); // Flush the data to the HTML output. Response.Flush(); buffer = new Byte[1024]; dataToRead = dataToRead - length; } else { //prevent infinite loop if user disconnects dataToRead = -1; } } } catch (Exception ex) { // Trap the error, if any. Response.Write("Error : " + ex.Message); } finally { if (iStream != null) { //Close the file. iStream.Close(); } Response.Close(); } } ,  private void DownloadFile() { string getPath = "demo_Android/demoAndroid.apk"; System.IO.Stream iStream = null; // Buffer to read 10K bytes in chunk: byte[] buffer = new Byte[1024]; // Length of the file: int length; // Total bytes to read: long dataToRead; // Identify the file to download including its path. string filepath = Server.MapPath(getPath); // Identify the file name. string filename = System.IO.Path.GetFileName(filepath); try { // Open the file. iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read); // Total bytes to read: dataToRead = iStream.Length; Response.ContentType = "application/vnd.android.package-archive"; Response.AddHeader("Content-Disposition", "attachment; filename=" + filename); // Read the bytes. while (dataToRead > 0) { // Verify that the client is connected. if (Response.IsClientConnected) { // Read the data in buffer. length = iStream.Read(buffer, 0, 1024); // Write the data to the current output stream. Response.OutputStream.Write(buffer, 0, length); // Flush the data to the HTML output. Response.Flush(); buffer = new Byte[1024]; dataToRead = dataToRead - length; } else { //prevent infinite loop if user disconnects dataToRead = -1; } } } catch (Exception ex) { // Trap the error, if any. Response.Write("Error : " + ex.Message); } finally { if (iStream != null) { //Close the file. iStream.Close(); } Response.Close(); } } 

Вот как я исправил свою проблему

Мое приложение размещено в Window Server 2008r2 с IIS 7

Шаг 1: На странице .aspx добавьте гиперссылку set navigateurl в качестве пути к файлу

 <asp:HyperLink ID="lnkdwnload" runat="server" NavigateUrl="~/Application_Android/MyAndroidAppAame.apk">Download MyApp</asp:HyperLink> 

Шаг 2: Web.config добавьте элемент mimeMap в staticContent

 <system.webServer> <staticContent> <mimeMap fileExtension=".apk" mimeType="application/vnd.android.package-archive"/> </staticContent> </system.webServer> 

Просмотр статьи в блоге. Скачать файл .apk Asp.net с помощью мобильного браузера

Это может быть та же проблема, с которой я столкнулся и с собственным браузером Android. Дело в том, что действие загрузки передается в приложение загрузки платформы (отдельно от браузера), которое перезагружает страницу, а вместо реального APK загружает страницу aspx.

Попробуйте загрузить с помощью Opera Mobile. Если проблема уходит, это, скорее всего, та же проблема. Замена кнопки стандартной гиперссылкой была бы самым простым решением. Хотя, возможно, это не вариант, если вам нужна другая логика, а не просто загрузка.