做一个wp7手机上传图片到服务器的功能,具体丝路是在手机端做一个照相或者选择图片的功能,点击上传,在服务器端做一个一般处理程序,接受上传的文件,存入文件夹,下面是主要代码:
手机端代码:
/// <summary>
/// 点击上传照片 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_Upload_Click(object sender, RoutedEventArgs e) { PhotoChooserTask task = new PhotoChooserTask(); task.PixelHeight = 100; task.PixelWidth = 100; task.ShowCamera = true; task.Completed += new EventHandler<PhotoResult>(task_Completed); task.Show();}
//选择图片完成事件,上传图片操作 void task_Completed(object sender, PhotoResult e) { const int BLOCK_SIZE = 4096;//Code参数可以是存入服务器图片的命名
Uri uri = new Uri("", UriKind.Absolute); WebClient wc = new WebClient(); wc.AllowReadStreamBuffering = true; wc.AllowWriteStreamBuffering = true;wc.OpenWriteCompleted += (s, args) =>
{ using (BinaryReader br = new BinaryReader(e.ChosenPhoto)) { using (BinaryWriter bw = new BinaryWriter(args.Result)) { long bCount = 0; long fileSize = e.ChosenPhoto.Length; byte[] bytes = new byte[BLOCK_SIZE]; do { bytes = br.ReadBytes(BLOCK_SIZE); bCount += bytes.Length; bw.Write(bytes); } while (bCount < fileSize); } } };wc.WriteStreamClosed += (s, args) =>
{ MessageBox.Show("上传成功!"); };wc.OpenWriteAsync(uri, "POST");
}在服务器端建一个一般处理程序WebClientUpLoadHandler.ashx
代码为:
string name = context.Request.Params["Code"].ToString();
//获取从Silverlight客户端传来的信息 int length = context.Request.ContentLength; byte[] bytes = context.Request.BinaryRead(length); string uploadFolder = System.AppDomain.CurrentDomain.BaseDirectory + "\\upload"; //目录不存在则新建 if (!Directory.Exists(uploadFolder)) { Directory.CreateDirectory(uploadFolder); }写入文件
try { using (FileStream fs = new FileStream(uploadFolder + "\\" + name+".jpg", FileMode.Create, FileAccess.Write)) { fs.Write(bytes, 0, bytes.Length); } context.Response.Write("服务器端成功"); } catch { context.Response.Write("写入失败"); } }public bool IsReusable
{ get { return false; } }成功实现了从手机端上传图片功能,在此基础上可以继续添加别的功能,在不同应用中用到。