<Grid x:Name="LayoutRoot" Background="White" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" />
<ColumnDefinition Width="225*" />
<ColumnDefinition Width="225*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="48" />
<RowDefinition Height="48" />
</Grid.RowDefinitions>
<ListBox x:Name="myList" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
ItemsSource="{Binding}"
Grid.Row="0"
Grid.Column="0"
Grid.RowSpan="2"
SelectionChanged="OnSelectionChanged" >
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<!--<my:GridSplitter Width="1" HorizontalAlignment="Left" VerticalAlignment="Stretch" Grid.Column="1"></my:GridSplitter>-->
<Image x:Name="myImage" Grid.Column="1" />
<Image x:Name="myImage1" Grid.Column="2" />
<StackPanel Grid.Row="1" Background="white" Grid.ColumnSpan="2" Orientation="Horizontal" HorizontalAlignment="Stretch">
<Button Grid.Row="1"
Grid.Column="0"
Content="选择图片"
Margin="8" Click="OnClick" FontSize="16" Width="100"/>
<Button Grid.Row="1"
Grid.Column="1"
Content="上传该图片"
Margin="8" Click="OnUpLoadClick" FontSize="16" Width="100"/>
</StackPanel>
<TextBlock x:Name="tbMsgString" Grid.Row="2" Margin="35,8,43,12" Grid.ColumnSpan="2" Text="下载进度" TextAlignment="Center" Foreground="Green" Grid.Column="1"></TextBlock>
<HyperlinkButton Grid.Row="1" Grid.Column="2" Content="下载该图片" Margin="48,8,77,8" Click="OnDownClick" FontSize="16" Width="100" TargetName="_self" NavigateUri=">
</Grid>
上传的一般处理程序:
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
using System.IO;
public class Handler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//获取上传的数据流
string fileNameStr = context.Request.QueryString["fileName"];
Stream sr = context.Request.InputStream;
try
{
string filename = "";
filename = fileNameStr;
byte[] buffer = new byte[4096];
int bytesRead = 0;
//将当前数据流写入服务器端文件夹ClientBin下
string targetPath = context.Server.MapPath("Pics/" + filename);
using (FileStream fs = File.Create(targetPath, 4096))
{
while ((bytesRead = sr.Read(buffer, 0, buffer.Length)) > 0)
{
//向文件中写信息
fs.Write(buffer, 0, bytesRead);
}
}
context.Response.ContentType = "text/plain";
context.Response.Write("上传成功");
}
catch (Exception e)
{
context.Response.ContentType = "text/plain";
context.Response.Write("上传失败, 错误信息:" + e.Message);
}
finally
{ sr.Dispose(); }
}
public bool IsReusable
{
get
{
return false;
}
}
}
后台:
public partial class uploaddown : UserControl
{
Stream save = null;
public uploaddown()
{
InitializeComponent();
}
public OpenFileDialog openDlg = new OpenFileDialog();
byte[] m_imageBuffer; // 定义变量 来存储 图片 二进制
FileStream fileStream;
private void OnClick(object sender, RoutedEventArgs e)
{
openDlg.Multiselect = true;
openDlg.Filter = "图像文件(*.jpg;*.png;*.jpeg)|*.jpg;*.png;*.jpeg";
bool? dlgResult = openDlg.ShowDialog();
if (dlgResult == true)
{
if (openDlg.File != null)
{
string[] fileName = openDlg.File.Name.Split('.');
if (!(fileName[fileName.Length - 1] == "jpg" || fileName[fileName.Length - 1] == "jpeg" || fileName[fileName.Length - 1] == "png"))
{
MessageBox.Show("请选择jpg、jpeg、png格式的文件!");
return;
}
fileStream = openDlg.File.OpenRead();
/// <summary>
/// 这段代码必须放在后面那段代码之前,否则m_imageBuffer存储的都是0,原因不明。
/// </summary>
long picLength = fileStream.Length;
m_imageBuffer = new byte[picLength];
fileStream.Read(m_imageBuffer, 0, (int)picLength); // 读取图片 二进制
BitmapImage bitmap = new BitmapImage();
bitmap.SetSource(fileStream);
this.myImage.Source = bitmap; // 预览图片
///获取图像的缓存存入字节数组m_imageBuffer中,方便以后保存头像
myList.DataContext = openDlg.Files;
fileStream.Close();
}
else
{
MessageBox.Show("请选择图片!");
}
}
}
private void OnUpLoadClick(object sender, RoutedEventArgs e)
{
if (fi != null)
{
WebClient webclient = new WebClient();
//string url = System.Windows.Browser.HtmlPage.Document.DocumentUri.ToString();
//var strmodelurl = url.Substring(0, url.LastIndexOf("/")) + "/Handler.ashx";
//webclient.OpenWriteCompleted += new OpenWriteCompletedEventHandler(webclient_OpenWriteCompleted);
//webclient.OpenWriteAsync(new Uri(strmodelurl, UriKind.Absolute), "POST", fi.OpenRead());
string uploadFileName = openDlg.File.Name.ToString(); //获取所选文件的名字
#region 把图片上传到服务器上
Uri upTargetUri = new Uri(String.Format("
webclient.OpenWriteCompleted += new OpenWriteCompletedEventHandler(webclient_OpenWriteCompleted);
webclient.Headers["Content-Type"] = "multipart/form-data";
webclient.OpenWriteAsync(upTargetUri, "POST", openDlg.File.OpenRead());
webclient.WriteStreamClosed += new WriteStreamClosedEventHandler(webclient_WriteStreamClosed);
#endregion
}
else
{
HtmlPage.Window.Alert("请选取相应图片!!!");
}
}
void webclient_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
{
//将图片数据流发送到服务器上
Stream inputStream = e.UserState as Stream;
Stream outputStream = e.Result;
save = e.UserState as Stream;
byte[] buffer = new byte[4096];
int bytesRead = 0;
while ((bytesRead = inputStream.Read(buffer, 0, buffer.Length)) > 0)
{
outputStream.Write(buffer, 0, bytesRead);
}
outputStream.Close();
inputStream.Close();
//HtmlPage.Window.Alert("图片上传成功!!!");
}
void webclient_WriteStreamClosed(object sender, WriteStreamClosedEventArgs e)
{
//判断写入是否有异常
if (e.Error != null)
{
System.Windows.Browser.HtmlPage.Window.Alert(e.Error.Message.ToString());
}
else
{
System.Windows.Browser.HtmlPage.Window.Alert("图片上传成功!!!");
}
}
FileInfo fi;
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if ((e.AddedItems != null) && (e.AddedItems.Count > 0))
{
fi = e.AddedItems[0] as FileInfo;
if (fi != null)
{
using (Stream stream = fi.OpenRead())
{
BitmapImage image = new BitmapImage();
image.SetSource(stream);
myImage.Source = image;
myImage.Visibility = Visibility.Visible;
myImage1.Source = image;
myImage1.Visibility = Visibility.Visible;
stream.Close();
}
}
}
}
/// <summary>
/// 下载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnDownClick(object sender, RoutedEventArgs e)
{
#region 111
//string uri = Application.Current.Host.Source.AbsoluteUri;
//int index = uri.IndexOf("/ClientBin");
//uri = uri.Substring(0, index) + "/Pics/96181024.jpg";
Begin the download.
//WebClient webClient = new WebClient();
//webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
//webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webclient_DownloadProgressChanged);
//webClient.OpenReadAsync(new Uri(uri));
#endregion
string filePath = "http://localhost:12268/Silverlightjizhang.Web/Pics/96181024.jpg";
WebRequest request = WebRequest.Create(filePath);
//判断是否需要下载
SaveFileDialog sfd = new SaveFileDialog();
string extension = System.IO.Path.GetExtension(filePath);
//sfd.Filter = string.Format("*{0}| *{0}", extension);
sfd.Filter = "图像文件(*.jpg;*.png;*.jpeg)|*.jpg;*.png;*.jpeg";
bool? dlgResult = sfd.ShowDialog();
if (dlgResult == true)
{
request.BeginGetResponse((responseAsyncCallBack) =>
{
this.Dispatcher.BeginInvoke(() =>
{
using (Stream openFileStream = sfd.OpenFile())
{
#region 获取response bytes
WebResponse response = request.EndGetResponse(responseAsyncCallBack);
Stream responseStream = response.GetResponseStream();
Byte[] bufferBytes = new Byte[responseStream.Length];
responseStream.Read(bufferBytes, 0, bufferBytes.Length);
#endregion
openFileStream.Write(bufferBytes, 0, bufferBytes.Length);
openFileStream.Flush();
}
});
}, null);
HtmlPage.Window.Alert("下载成功!!!");
}
}
void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error != null)
{
MessageBox.Show(e.Error.ToString());
return;
}
else
{
//获取下载的流数据(在此处是图片数据)并显示在图片控件中
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.SetSource(e.Result);
myImage1.Source = bitmapImage;
// Stream clientStream = (Stream)e.Result;
// 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();
}
}
void webclient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
this.tbMsgString.Text = string.Format("完成百分比:{0} 当前收到的字节数:{1} 资料大小:{2} ",
e.ProgressPercentage.ToString() + "%",
e.BytesReceived.ToString(),
e.TotalBytesToReceive.ToString());
}
}