我對Silverlight來說相當新穎。我正嘗試在Silverlight中下載.pdf文件(和其他一些格式)。用戶點擊一個按鈕,系統進入並獲取URI,然後顯示SaveFileDialog以獲取保存文件的位置。這裏是一個代碼片段:無法在Silverlight下載.pdf文件
WebClient wc = new WebClient();
wc.DownloadStringCompleted += (s, e3) =>
{
if (e3.Error == null)
{
try
{
byte[] fileBytes = Encoding.UTF8.GetBytes(e3.Result);
using (Stream fs = (Stream)mySaveFileDialog.OpenFile())
{
fs.Write(fileBytes, 0, fileBytes.Length);
fs.Close();
MessageBox.Show("File successfully saved!");
}
}
catch (Exception ex)
{
MessageBox.Show("Error getting result: " + ex.Message);
}
}
else
{
MessageBox.Show(e3.Error.Message);
};
wc.DownloadStringAsync("myURI", UriKind.RelativeOrAbsolute));
該文件被保存成功,但它大約是原來的兩倍,並且是不可讀的。 e3.Result查看正確的大小(5Mb),但我懷疑它包含許多無關字符。 FileBytes似乎是大約兩倍(11Mb)。我想嘗試DownloadDataAsync而不是DownloadStringAsync(希望它可以解決任何編碼問題),但是Silverlight有一個非常簡化的System.Net.WebClient版本,不支持DownloadDataAsync(它不會編譯)。
我相當肯定這是一個編碼問題,但我看不出如何解決它。
你爲什麼使用編碼?我認爲pdf文件是二進制文件,不應該編碼,您是否嘗試使用DownloadDataCompleted(或使用編碼編寫字符串?) – wiero
DownloadDataCompleted在System.Net.WebClient的Silverlight版本中不可用。我試圖只寫字符串,但得到了很多相同的結果。 –