2012-06-06 37 views
2

我正在使用VS2010,C#開發基於Web的瀏覽器中的Silverlight 4應用程序,我正在使用IMAP閱讀電子郵件(當前是gmail),我在我的Silverlight中使用WCF以訪問Gmail郵件數據。一切都很順利,但我有下載附件的問題,我可以在字節數組中獲得電子郵件附件,使用Response.Stream或File.WriteAllBytes(在ASP.NET頁面中)保存這些字節沒有問題。但是當我想將它們保存在我的SL應用程序中時,我遇到了兩個問題:似乎我無法在我的WCF中使用Response,並且File.WriteAllBytes也給我這個錯誤:文件操作不允許,拒絕訪問myfilename。我有什麼選擇在我的SL應用程序中下載附件?我應該返回我的文件數據作爲字節[] SL應用程序或我應該將它們直接保存在WCF?在Silverlight中下載電子郵件附件

我應該使用什麼方法?響應?文件?還是其他什麼東西,感謝

+0

你能澄清,如果你能得到你的附件爲'字節[]'在Silverlight? – StaWho

+0

是的,正如我所說我可以將我的附件文件作爲Silverlight中的字節數組,但我無法將其保存到客戶端磁盤! –

回答

3

這是你如何保存byte[]在SL4到文件:

private void SaveFile(byte[] bytes) 
    { 
     SaveFileDialog saveDialog = new SaveFileDialog(); 
     saveDialog.DefaultExt = ".stuff"; 
     saveDialog.Filter = "Funky Stuff File|*.stuff|All Files|*.*"; 
     saveDialog.FilterIndex = 1; 
     bool? dialogResult = saveDialog.ShowDialog(); 
     if (dialogResult == true) 
     { 
      using (Stream ms = (Stream)saveDialog.OpenFile()) 
      { 
       ms.Write(bytes, 0, bytes.Length); 
       ms.Close(); 
      } 
     } 
    } 
+0

我昨天使用了SaveFileDialog,但是我沒有創建文件,直到我關閉了我的項目,但它現在起作用了!謝謝,有什麼辦法讓我像ASP.NET文件下載窗口這個窗口?例如我可以修復文件名作爲文件名已知(這是一個郵件附件),我應該使用默認文件名? –

+1

由於安全考慮,您不能在Silverlight的「SaveFileDialog」中使用默認文件名。至於讓你的窗口更像ASP.NET文件下載窗口,不能從頭頂告訴你,但這聽起來不可能。我不是ASP的人,但也許有通過託管網站調用文件下載的方式......但是,那麼你可能不得不在客戶端和服務器之間傳送文件...認爲我對此太過分了:) – StaWho

+1

或嘗試探索高架信任或孤立存儲可能帶來的表 – StaWho