Silverlight从客户端上传文件到服务器
这里介绍的是一种利用WebClient手动发送Stream到服务器页面的上传文件方法。
一、服务器接收文件
这里使用一个ASHX页面来接收和保存Silverlight传来的Stream,页面代码如下:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web; namespace Silverlight
{
/// <summary>
/// FileUploadHandler 的摘要说明
/// </summary>
public class FileUploadHandler : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
//获取上传参数 - 文件名
string fileName = context.Request["FileName"]; //获取上传的数据流
using (Stream inputStream = context.Request.InputStream)
{
try
{
//数据缓冲区
byte[] buffer = new byte[4096];
int bytesRead = 0; //准备保存路径和文件名
string filePath = string.Format(@"D:\FileUpload\"); //检查保存路径是否存在
if (!Directory.Exists(filePath))
{
//不存在进行创建
Directory.CreateDirectory(filePath);
} //准备写入文件流
using (FileStream fs = File.Create(filePath + fileName, 4096))
{
//开始循环写入文件
while ((bytesRead = inputStream.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);
}
}
} public bool IsReusable
{
get
{
return false;
}
}
}
}
这里保存文件的主要流程就是接收上传参数,准备保存文件,通过读取上传流保存文件内容。
二、客户端发送文件
客户端发送文件使用的是WebClient类。
首先建立一个WebClient连接:
//准备上传连接
WebClient uploadClient = new WebClient();
uploadClient.Headers["Content-Type"] = "multipart/form-data"; //连接打开后的操作
uploadClient.OpenWriteCompleted += uploadClient_OpenWriteCompleted;
//流写入完成后的操作
uploadClient.WriteStreamClosed += uploadClient_WriteStreamClosed; //打开上传连接
uploadClient.OpenWriteAsync(new Uri("", UriKind.Relative), "POST", fileStream);
WebClient打开连接后的处理:
void uploadClient_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
{
//将文件数据流发送到服务器上 // e.UserState - 需要上传的流(客户端流)
using (Stream clientStream = e.UserState as Stream)
{
// e.Result - 目标地址的流(服务端流)
using (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);
}
}
}
}
WebClient连接关闭后的处理:
void uploadClient_WriteStreamClosed(object sender, WriteStreamClosedEventArgs e)
{
//判断写入是否有异常
if (e.Error != null)
{
MessageBox.Show("上传失败!", e.Error.Message.ToString());
}
else
{
MessageBox.Show("上传成功!", "文件已保存!");
}
}
客户端这边主要就是打开连接,然后打开服务器的接收流,然后传输文件数据流到服务器。
Silverlight从客户端上传文件到服务器的更多相关文章
- 客户端(Winform窗体)上传文件到服务器(web窗体)简单例子
客户端:先创建一个winform窗体的应用程序项目 项目结构
- WPF上传文件到服务器
利用WebClient 上传文件到服务器 创建一个空网站,创建一个UploadFile.aspx项, 服务器报500错误:检查文件保存路径是否存在,检查文件大小限制 protected void Pa ...
- Android上传文件至服务器(上)
每一次都不能上首页,真悲催..管理员让我上一次首页? 很多时候我更愿意一个人写代码,与其在垃圾代码上改改改,我更愿意直接重构. 整洁的代码简单直接.整洁的代码如同优美的散文.整洁的代码从不隐藏设计者的 ...
- asp.net 客户端上传文件全路径获取方法
asp.net 获取客户端上传文件全路径方法: eg:F:\test\1.doc 基于浏览器安全问题,浏览器将屏蔽获取客户端文件全路径的方法,只能获取到文件的文件名,如果需要获取全路径则需要另想其他 ...
- android上传文件到服务器
package com.spring.sky.image.upload.network; import java.io.DataOutputStream; import java.io.File; i ...
- Android端通过HttpURLConnection上传文件到服务器
Android端通过HttpURLConnection上传文件到服务器 一:实现原理 最近在做Android客户端的应用开发,涉及到要把图片上传到后台服务器中,自己选择了做Spring3 MVC HT ...
- Java基础知识强化之网络编程笔记14:TCP之多个客户端上传到一个服务器的思考(多线程改进)
1. 多个客户端上传到一个服务器的思考 通过while循环可以改进一个服务器接收多个客户端. 但是这个是有问题的.如果是这种情况,假设我还有张三,李四,王五这三个人分别执行客户端 张三:好好学习.a ...
- C 上传文件到服务器(含接收端源码)
本文demo下载地址:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=1067 实例向大家展示了如何用Visua ...
- joomla安装插件报错:上传文件到服务器发生了一个错误。 过小的PHP文件上传尺寸
在安装joomla的AKeeba插件的时候报错如下:上传文件到服务器发生了一个错误. 过小的PHP文件上传尺寸.解决方法是修改php.ini文件,打开文件后搜索upload_max_filesize! ...
随机推荐
- 支持各种控件上/下拉刷新的android-pulltorefresh
android- pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新,如ListView.ViewPager.WevView. ExpandableListView.Grid ...
- angular5使用httpclient时解决跨域问题
跨域问题的环境: 在本地开发时,使用命令行ng s开启服务,访问地址为http://localhost:4200 假设调用数据接口的服务地址为http://localhost:8088/api/dat ...
- ORACLE常用监控语句(未完待续)
--查询日志的切换频率 select t1.RECID as srecid ,t2.RECID as erecid ,t1.FIRST_TIME as stime ...
- Java从零开始学十九(异常)
一.什么是异常 从字面上讲,就是不正常的现实就是异常. 程序中的异常也是要在程序运行中才会偶尔发生.如果程序还没有运行,编译就报错,这种不叫异常,这种叫编译错误,通常是语法上的错误 二.java中异常 ...
- 深入理解Object提供的阻塞和唤醒API
深入理解Object提供的阻塞和唤醒API 前提 前段时间花了大量时间去研读JUC中同步器AbstractQueuedSynchronizer的源码实现,再结合很久之前看过的一篇关于Object提供的 ...
- Excel还是那些事
文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论
- Element学习
生成 HTML 文档初始结构 HTML 文档的初始结构,就是包括 doctype.html.head.body 以及 meta 等内容.你只需要输入一个 “!” 就可以生成一个 HTML5 的标准文档 ...
- Emmet初探2
关于Emmet Emmet插件的前身是Zen coding,可以大幅度提高前端开发效率的一个工具,也有人说类似于jade(高性能的模板引擎,它深受 Haml 影响,它是用 JavaScript 实现的 ...
- Ubuntu 12.04解决重启后resolv.conf清空的问题
这跟以前用RHT系的 情况是完全不一样的: 在google上搜了一下,发现这里面还真有些奥妙: 1 /etc/resolv.conf 其实是一个Link 它其实指向的是 /run/resolvconf ...
- Windows下安装Redmine 2.5.2不全然指南
我决定在项目中引入Redmine来管理开发任务和计划,至于Redmine的优点,请问度娘或者脑补一下. 互联网搜索到的.基本上都是旧版本号的. 1.2.1 的最多,我要新的啊,所以仅仅好自己来啦. 本 ...