silverlight 图片上传下载

  <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("

http://localhost:12268/Silverlightjizhang.Web/Handler.ashx?fileName={0}", uploadFileName), UriKind.Absolute); //指定上传地址

                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());

        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值