silverlight中 设置 头像(添加图片)
参考文章: 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中 设置 头像(添加图片)的更多相关文章
- Silverlight中文本框添加回车事件后,换行无法清除的解决方法
在开发Silverlight的项目中,为了更好的用户体验,我们常要给一些控件添加一些快捷键.然而,在Silverlight中当用户回车提交后,光标停留在文本框的第二行怎么也清除不掉,经过一段时间研究, ...
- Gtk 窗口,控件,设置(添加图片等)
1.关于窗口 // 创建顶层窗体,后面有POPUP的 GtkWidget *main_window; main_window = gtk_window_new (GTK_WINDOW_TOPLEV ...
- IOS 在IOS6中设置navigationBar背景图片 会有一条 黑色阴影 --- 解决方案
//给navigationBar设置背景图片 if ([self.navigationController.navigationBar respondsToSelector:@selector(set ...
- GitHub 中 readme 如何添加图片
一.Readme 是什么 readme文件一般是放在github 每个repo的根目录下,用来解释.说明本repo的主要内容和相关信息.而且在repo主页进去的时候会被自动加载.一般采用md标记的文本 ...
- 在tableView中设置cell的图片和文字
// 设置UITableViewCellEditingStyle的 accessoryType UITableViewCellAccessoryNone, // d ...
- markdown中设置、调整图片尺寸
使用百分比描述尺寸 <img src="https://img2018.cnblogs.com/blog/1122471/201902/1122471-2019022218575673 ...
- 一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)
述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 关于在Silverlight中添加图片的问题
在Silverlight中添加图片,目前支持的Image格式有jpg和png两种,如何在目录中添加,有些什么技巧呢? <StackPanel Background="White&quo ...
- Silverlight 中图片路径的设置
在Silverlight中图片的设置方法有几种 如上图在一个工程中有个images文件夹,buttons.xaml页面中的Image控件要引用一张图片 第一种方法 xaml: <Image x: ...
随机推荐
- ubuntu nginx ssl 证书配置
前几天自己用 egg.js 写了个 api 接口,然后把它部署到服务器上.服务器是ubuntu 16.04 + nginx:因为要用到https,然后今天实践了一下如何配置https. 关于htt ...
- jquery 根据文本设置选中某个选项
<select name="streetid" id="streetid"> <option value="4">a ...
- 【Redfin SDE intern】跪经
萌新的面试第一弹 Redfin是我求职生涯中的第一家,第一个电面,第一个onsite.除了结果不好,其他过程都很好... 春节当天风风火火去西雅图面试,之前分配的五个面试官其中有两个中国人,然而全部被 ...
- FileSystemObject对象及常用方法
FSO 对象模式包含在 Scripting 类型库中,该库位于 Scrrun.dll 文件中.因而,要使用 FSO 对象模式,必须把 Scrrun.dll 放在 Web 服务器的适当系统目录中. 要用 ...
- Xshell配置使用linux的图形界面
1.配置Xshell如下图 2.在命令行中执行"gnome-panel". 3.或者使用xstart,配置如下图:
- linux 查找指定进程并kill
ps -ef | grep php | grep -v 'grep' | awk '{print $2}'| xargs kill -9
- python(元组,不可修改序列)
元组也是序列,区别于列表,它不可更改,语法简单只要加逗号隔开即可 1.1,2,3 (1,2,3) 2.42, (42,) 3.3*(40+2) 126 3*(40+2,) (42,42,42) 4.x ...
- Android 音视频深入 十七 FFmpeg 获取RTMP流保存为flv (附源码下载)
项目地址https://github.com/979451341/RtmpSave 这个项目主要代码我是从雷神那弄过来的,不愧是雷神,我就配个环境搞个界面就可以用代码了. 这一次说的是将RTMP流媒体 ...
- ie11~ie9兼容的布局写法。bootsteap的12栅格,栅格化就可以实现。
全局 CSS 样式 设置全局 CSS 样式:基本的 HTML 元素均可以通过 class 设置样式并得到增强效果:还有先进的栅格系统. 概览 深入了解 Bootstrap 底层结构的关键部分,包括我们 ...
- react-redux-store
store是联系state 和 reducer的部分 Store 有以下职责: 维持应用的 state: 提供 getState() 方法获取 state: 提供 dispatch(action) 方 ...