您的位置:首页 > 其它

silverlight 文件下载若干方法

2011-03-04 15:32 183 查看
方法一:WebService



前台代码:

<DataTemplate>
<Button Content="下载" Height="23" Name="button3" Tag="{Binding Udocname}" Width="60" Click="button3_Click" />
</DataTemplate>


后台代码:

private void button3_Click(object sender, RoutedEventArgs e)
{            Button b = sender as Button;
//实例化button

//_file 要下载的文件路径
//string _file = "http://localhost:8080/EHRWCF/upload/2.rar"; //这里改成你网站里的文件路径
string _file = "http://192.168.1.102:8080/EHRWCF/upload/" + b.Tag.ToString();
SaveFileDialog sf = new SaveFileDialog();
sf.DefaultExt = "rar";
sf.Filter = "rar压缩文件 (*.rar)|*.rar|zip压缩文件 (*.zip)|*.zip|所有文件 (*.*)|*.*";
sf.FilterIndex = 1;
if (sf.ShowDialog() != true) return;
Stream clientStream = sf.OpenFile();
Uri _uri = new Uri(_file, UriKind.Absolute);
WebClient client = new WebClient();

if (client.IsBusy)
{
client.CancelAsync();
}
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);

client.OpenReadAsync(_uri, clientStream);

}
#region 异步文件下载
void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error != null)
{
//txtinfo.Text += e.Error.Message;
MessageBox.Show(e.Error.ToString());
//MessageBox.Show("下载文件时出错,可能是文件已经不存在!");
return;
}
if (e.Cancelled != true)
{
Stream clientStream = e.UserState as Stream;
Stream serverStream = (Stream)e.Result;
byte[] buffer = new byte[serverStream.Length];
serverStream.Read(buffer, 0, buffer.Length);
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Close();
serverStream.Close();
}
}
#endregion


方法2:使用下载控件类似于asp.net中的<a href="url"></a>方法



前台代码:

//引用命名空间
xmlns:localConv="clr-namespace:KX_EHR.Class"
<UserControl.Resources>
<localConv:ConvtoAddStr x:Key="ConvtoAddString"/>
</UserControl.Resources>

//datagrid中
<DataTemplate>
<HyperlinkButton Content="下载" NavigateUri="{Binding Udocname,Converter={StaticResource ConvtoAddString}}"></HyperlinkButton>
</DataTemplate>


后台类型转化器:

/// <summary>
/// 把代码转化成指定的类容
/// </summary>
/// <param name="value"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public class ConvtoAddStr : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (!value.ToString().Contains(@"http://192.168.1.102:8080/EHRWCF/upload/"))
{
return @"http://192.168.1.102:8080/EHRWCF/upload/" + value;
}
else
return value;
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value.ToString().Contains(@"http://192.168.1.102:8080/EHRWCF/upload/"))
{
return value.ToString().Replace(@"http://192.168.1.102:8080/EHRWCF/upload/", "");
}
else
return value;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: