2012-06-18 80 views
3

在我的.aspx页面中,我有下载按钮,其中onclick下载.apk文件。Error使用Android手机浏览器从Asp.net网站下载.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(); 
     } 
    } 
+0

,你可以下载你的文件,当你直接去下载链接,HTTP://yourwebsite/demo_Android/demoAndroid.apk – TimVK

+0

这不是错误,但我认为在它的每一个冲水1K太快了!也没有理由在每个循环上重新创建缓冲区。有没有任何情况下,Android有保护,不允许下载.apk文件? – Aristos

+0

这行也可能会产生你的错误'Response.Write(“Error:”+ ex.Message);' - 你需要记录你的错误。如果你发送数据中间,这个错误文本,然后你的包被打破。 – Aristos

回答

6

我怎么继承人固定我的问题

我的应用程序下有Windows服务器2008R2 IIS 7

第1步托管:在.aspx页面中添加超链接设置为navigateurl文件路径

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

第2步:Web.config添加静态内容下的mimeMap元素

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

查看博客文章:Download .apk file Asp.net website using mobile browser

0

这可能是我还面临着Android的原生浏览器相同的问题。事情是下载操作被传递到平台的下载应用程序(与浏览器分开),它重新加载页面,而不是真正的APK,它下载aspx页面。

尝试使用Opera Mobile进行下载。如果问题消失,那很可能是同样的问题。用标准超链接替换按钮将是最简单的解决方案。虽然如果你需要有其他逻辑,而不是下载,它可能不是一个选项。

+0

已经从Opera Mini浏览器试过了,还有同样的问题只有22kb下载。 –

+0

检查文件的内容,是二进制还是纯文本? – gelupa

+0

downld文件(22kb)只包含html内容 –

相关问题