参考文章: http://www.cnblogs.com/wsdj-ITtech/archive/2009/08/26/1554056.html


1. ChainManager.xaml 前台

<Grid Grid.Row="0" Grid.Column="3" Grid.RowSpan="3" Margin="0,0,0,0" HorizontalAlignment="Left">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="50"/>
                            </Grid.ColumnDefinitions>

<Border BorderThickness="1" Width="110" Height="110" Margin="5" BorderBrush="#404040">
                                <Image x:Name="imgHead" Margin="5" Stretch="Fill"/>
                            </Border>
                            <telerik:RadButton Name="btnPhoto" Grid.Column="1" Content="选择" Width="40" Height="25" Click="btnPhoto_Click"  TabIndex="3"/>
                        </Grid>

2. XAMLChainManager.cs 后台

设定全局变量
        System.IO.FileInfo fileinfo = null;     //获取选定图片信息


/// <summary>
        /// 获取图片文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPhoto_Click(object sender, RoutedEventArgs e)
        {
            try
            {

      /*
               *   OpenWriteCompleted - 在打开用于上传的流完成时(包括取消操作及有错误发生时)所触发的事件
               *   WriteStreamClosed - 在写入数据流的异步操作完成时(包括取消操作及有错误发生时)所触发的事件
               *   UploadProgressChanged - 上传数据过程中所触发的事件。如果调用 OpenWriteAsync() 则不会触发此事件
               *   Headers - 与请求相关的的标头的 key/value 对**
               *   OpenWriteAsync(Uri address, string method, Object userToken) - 打开流以使用指定的方法向指定的 URI 写入数据
               *     Uri address - 接收上传数据的 URI
               *     string method - 所使用的 HTTP 方法(POST 或 GET)
               *     Object userToken - 需要上传的数据流
               */

             // 获取图片文件
                OpenFileDialog openFileDialog = new OpenFileDialog()
                {
                    Filter = "JPEG Images (*.jpg,*.jpeg)|*.jpg;*.jpeg|PNG Images (*.png)|*.png|All images|*.png;*.jpg;*.jpeg",
                    Multiselect = false
                };

if (openFileDialog.ShowDialog() == true)//.DialogResult.OK)
                {
                    fileinfo = openFileDialog.File;

if (fileinfo != null)
                    {

         // 图片显示在页面空间里
                        RadBitmap vwatermarkBitmap = new RadBitmap(fileinfo.OpenRead());
                        this.imgHead.Source = vwatermarkBitmap.Bitmap;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

/// <summary>
        /// 图片上传到服务器上
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                   if (fileinfo != null)
                    {
                        #region 把图片上传到服务器上

WebClient webclient = new WebClient();

          Uri WebUri = new Uri(Application.Current.Host.Source, "../");  //获取网站根目录
                         Uri upTargetUri = new Uri(String.Format(WebUri + "WebClientUpLoadStreamHandler.ashx?fileName={0}", fileinfo.Name.ToString()), UriKind.Absolute); //指定上传地址
                        webclient.OpenWriteCompleted += new OpenWriteCompletedEventHandler(Webclient_OpenWriteCompleted);
                        webclient.Headers["Content-Type"] = "multipart/form-data";
                        webclient.OpenWriteAsync(upTargetUri, "POST", fileinfo.OpenRead());
                        webclient.WriteStreamClosed += delegate(object sender1, WriteStreamClosedEventArgs f)
                        {
                            if (f.Error != null)
                            {
                                System.Windows.Browser.HtmlPage.Window.Alert(f.Error.Message.ToString());
                            }
                        };

#endregion
                    }
            }
            catch (Exception)
            {
                RadWindow.Alert("保存失败,请稍后重试!");
            }
        }

/// <summary>
        /// 将图片数据流发送到服务器上
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

void Webclient_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
        {
            Stream clientStream = e.UserState as Stream;  // 需要上传的流(客户端流)
            Stream serverStream = e.Result;  // 目标地址的流(服务端流)
            byte[] buffer = new byte[4096];
            int readcount = 0;  

     // clientStream.Read - 将需要上传的流读取到指定的字节数组中
            while ((readcount = clientStream.Read(buffer, 0, buffer.Length)) > 0) 
            {

// serverStream.Write - 将指定的字节数组写入到目标地址的流
                serverStream.Write(buffer, 0, readcount);
            }

serverStream.Close();
            clientStream.Close();
        }


在数据存的是文件名称 (代码这里省略):

  chain.ImgName = fileinfo == null ? "" : fileinfo.Name.ToString(); //获取所选文件的名字;

从数据库中读到文件名称后,显示在页面上:

   imgHead.Source = new BitmapImage(new Uri("/Pics/" + chain.ImgName, UriKind.Relative));


3. 在服务端添加文件(WebClientUpLoadStreamHandler.ashx),如图

代码实现如下:

/// <summary>
    /// WebClientUpLoadStreamHandler 的摘要说明
    /// </summary>
    public class WebClientUpLoadStreamHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

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("/ClientBin/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();
            }
        }
    }

4.并且在服务端建立文件夹 Pics,储存上传到服务器的图片,如图:

silverlight中 设置 头像(添加图片)的更多相关文章

  1. Silverlight中文本框添加回车事件后,换行无法清除的解决方法

    在开发Silverlight的项目中,为了更好的用户体验,我们常要给一些控件添加一些快捷键.然而,在Silverlight中当用户回车提交后,光标停留在文本框的第二行怎么也清除不掉,经过一段时间研究, ...

  2. Gtk 窗口,控件,设置(添加图片等)

    1.关于窗口   // 创建顶层窗体,后面有POPUP的 GtkWidget *main_window; main_window = gtk_window_new (GTK_WINDOW_TOPLEV ...

  3. IOS 在IOS6中设置navigationBar背景图片 会有一条 黑色阴影 --- 解决方案

    //给navigationBar设置背景图片 if ([self.navigationController.navigationBar respondsToSelector:@selector(set ...

  4. GitHub 中 readme 如何添加图片

    一.Readme 是什么 readme文件一般是放在github 每个repo的根目录下,用来解释.说明本repo的主要内容和相关信息.而且在repo主页进去的时候会被自动加载.一般采用md标记的文本 ...

  5. 在tableView中设置cell的图片和文字

    // 设置UITableViewCellEditingStyle的 accessoryType UITableViewCellAccessoryNone,                   // d ...

  6. markdown中设置、调整图片尺寸

    使用百分比描述尺寸 <img src="https://img2018.cnblogs.com/blog/1122471/201902/1122471-2019022218575673 ...

  7. 一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)

    述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  8. 关于在Silverlight中添加图片的问题

    在Silverlight中添加图片,目前支持的Image格式有jpg和png两种,如何在目录中添加,有些什么技巧呢? <StackPanel Background="White&quo ...

  9. Silverlight 中图片路径的设置

    在Silverlight中图片的设置方法有几种 如上图在一个工程中有个images文件夹,buttons.xaml页面中的Image控件要引用一张图片 第一种方法 xaml: <Image x: ...

随机推荐

  1. JS获取访客IP+判断归属地+自动跳转

    由于公司业务需要,需要对网站特定地区的访客进行不同跳转.比如,上海的用户跳转到“shanghai.url.cn”,南京的用户跳转到“nanjing.url.cn”.下面就是我的实现方法,分享出来,顺便 ...

  2. 爬虫(四)requests模块1

    引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档 ...

  3. element 树形菜单加title

    <script src="//unpkg.com/vue/dist/vue.js"></script><script src="//unpk ...

  4. log日志文件

    单文件写 根据日志的等级是否写入,下面的一个例子就是等级为10,大于等于等级10的记录,小于的话就不记录,在创建之前先进行基本的日志格式配置 import logging logging.basicC ...

  5. Android 音视频深入 十八 FFmpeg播放视频,有声音(附源码下载)

    项目地址https://github.com/979451341/AudioVideoStudyCodeTwo/tree/master/FFmpegv%E6%92%AD%E6%94%BE%E8%A7% ...

  6. 分享身为linux爱好者的成长及学习经历

    成长是无尽的阶梯,一步一步的攀登,回望来时的路,会心一笑:转过头,面对前方,无言而努力的继续攀登.现在来和linux爱好者说说我的成长经历,在我的大学时光里我从一个一无所知的少年转变成了一个见多识广的 ...

  7. day47-python爬虫学习二

    2.Request的会话对象 s = requests.session() Python2 S = requests.Session() 所有一次会话的信息都保存在s中,只需要对s进行操作就可以了. ...

  8. 8ci

  9. storcli 简易使用介绍

    MegaCli 是LSI公司官方提供的SCSI卡管理工具,由于LSI被收购变成了现在的Broadcom,所以现在想下载MegaCli,需要去Broadcom官网查找Legacy产品支持,搜索MegaR ...

  10. 第三周博客之一---Oracle基础知识

    一.数据库的定义.作用介绍 1.定义:按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库. 2.数据库的发展历史: 2.1.在1962年数据库一词出现在系统研发的公司的技术备忘录中 2. ...