方法一:WebService
前台代码:
<
DataTemplate
>
< Button Content ="下载" Height ="23" Name ="button3" Tag =" {Binding Udocname} " Width ="60" Click ="button3_Click" />
</ 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
// 实例化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 >
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;
}
}
/// 把代码转化成指定的类容
/// </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;
}
}