2012-06-18 231 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內容 –

相關問題