C# WebClient实现文件上传
一、同步上传
文章 https://www.cnblogs.com/duanjt/p/6420172.html 里面有提到服务端通过WebApi如何实现文件上传,这里就只说客户端使用WebClient上传,直接上代码:
private void button2_Click(object sender, EventArgs e)
{ try
{
string url = "http://localhost:29817/api/values/SaveFile"; if (string.IsNullOrEmpty(this.textBox1.Text))
{
MessageBox.Show("请先选择要上传的文件");
return;
} string fileName = this.textBox1.Text;//文件全路径(e:\abc.txt)
string safeFileName = Path.GetFileName(fileName);//文件名(abc.txt) WebClient client = new WebClient();
client.Credentials = CredentialCache.DefaultCredentials;
client.Headers.Add("Content-Type", "application/form-data");//注意头部必须是form-data
client.QueryString["fname"] = safeFileName;
byte[] fileb = client.UploadFile(new Uri(url), "POST", fileName);
string res = Encoding.UTF8.GetString(fileb);
MessageBox.Show(res);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
注意:
1.Header的Content-Type必须设置为application/form-data
二、异步上传
上面是同步方式上传,下面是异步方式上传
private void button2_Click(object sender, EventArgs e)
{
try
{
string url = "http://localhost:29817/api/values/SaveFile";
if (string.IsNullOrEmpty(this.textBox1.Text))
{
MessageBox.Show("请先选择要上传的文件");
return;
} string fileName = this.textBox1.Text;//文件全路径(e:\abc.txt)
string safeFileName = Path.GetFileName(fileName);//文件名(abc.txt) WebClient client = new WebClient();
//定义事件,上传成功事件和上传进度事件
client.UploadFileCompleted += client_UploadFileCompleted;
client.UploadProgressChanged += client_UploadProgressChanged; client.Credentials = CredentialCache.DefaultCredentials;
client.Headers.Add("Content-Type", "application/form-data");//注意头部必须是form-data
client.QueryString["fname"] = safeFileName;
//异步上传,通过事件回调获取运行状态
client.UploadFileAsync(new Uri(url), "POST", fileName); }
catch (Exception ex)
{
MessageBox.Show("错误:"+ex.Message);
}
} //上传进度事件,修改进度条
void client_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
{
progressBar1.Minimum = ;
progressBar1.Maximum = (int)e.TotalBytesToSend;
progressBar1.Value = (int)e.BytesSent;
progressBar1.Text = e.ProgressPercentage.ToString(); } //上传完成事件,判断是否上传成功
void client_UploadFileCompleted(object sender, UploadFileCompletedEventArgs e)
{
if (e.Error == null)
{
progressBar1.Value = progressBar1.Maximum;
this.label2.Text = "上传成功.";
}
else
{
MessageBox.Show("上传错误:" + e.Error.Message);
this.label2.Text = "上传失败.";
}
}
说明:
1.上传的方法由UploadFile修改为UploadFileAsync,这个方法是异步的,非阻塞。
2.注册WebClient的两个事件UploadFileCompleted和UploadProgressChanged,用于显示进度。
三、大文件上传
大文件传输
1.服务端web.config需要配置最大的请求:
<configuration>
<system.web>
<httpRuntime targetFramework="4.5" maxRequestLength="" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength=""/>
</requestFiltering>
</security>
</system.webServer>
</configuration>
2.WebApi代码
[HttpPost]
public String SaveFile()
{
var request = HttpContext.Current.Request;
if (request.Files.Count > 0)
{
HttpPostedFile file= request.Files.Get(0);
file.SaveAs(Path.Combine("E:", file.FileName));
}
return "1";
}
备注:
1.一般配置为最大2G差不多了,如果比2G还大,建议使用FTP上传吧。
C# WebClient实现文件上传的更多相关文章
- 使用WebClient进行文件上传
注释部分为异步上传,几行代码就能搞定 public static bool Upload(string url, string path) { using (WebClient client = ne ...
- C# WebClient 的文件上传下载
上传文件 string path = openFileDialog1.FileName; WebClient wc = new WebClient(); wc.Credentials = Creden ...
- 精讲响应式WebClient第4篇-文件上传与下载
本文是精讲响应式WebClient第4篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方 ...
- C#文件上传和文件下载
#region 文件上传 private void UpLoadFile(string fileName, string fileNamePath, string uriString) { ); if ...
- [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表
写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...
- 文件上传下载(C#,web,asp.net)
目的:在浏览器页面启动上传下载CS软件,实现文件的批量下载与上传. 技术路线: 开发上传下载客户端CS程序与注册程序,压缩放到服务器端指定位置: 开发服务器端程序用以接收上传请求,压缩放到服务器端: ...
- C# WinForm 文件上传下载
/// <summary> /// WebClient上传文件至服务器 /// </summary> /// <param name="fileNamePath ...
- HTTP文件上传
看到网上很多链接文件(word.pdf...)可以下载,想制作http下载链接. 其实是将某文件直接放在服务器上搭建的网站上某目录下即可,例如:http://xxx:port/UpgradePack/ ...
- C# 应用 - 使用 WepApp 处理文件上传、下载请求
1. 代码 /// <summary> /// 文件上传下载控制器 /// </summary> public class FileController : ApiContro ...
随机推荐
- sping_依赖注入的三种方式
1. set注入:通过setxxx()给属性赋值 <!--id是对象--> <!--class是类--> <bean id = "student" ...
- spring IOC 分析及实现
什么是IOC Inversion of Control,控制反转,也成依赖倒置. 反转: 依赖对象的创建被反转,使用IOC之前,对象由自己创建,反转后,由IOC容器获取 IOC容器的工作: 负责创建, ...
- EF性能检测工具MiniProfilerEF6的使用
一.在VS项目中分别安装包MiniProfiler.MiniProfiler.EF6.MiniProfiler.MVC4 二.在Global.asax文件的Application_BeginReque ...
- windows----------如何禁用PC端微信的开机启动
1.开始菜单--->运行--->输入msconfig 2.如下图,然后点击启动 3.打开任务管理器 4.右键wechat,然后禁用.
- SSH的软链接后门
之前说过为了防止SSH的后面漏洞 , 升级到高版本的OpenSSH , 那也不能保证万无一失 经典后门 直接对sshd建立软连接 , 之后用任意密码登录即可 看下面操作 创建完软连接后 创建新的会 ...
- audio google play()
<audio id="music" src="" preload loop="loop" autostart="true&q ...
- 比NGINX更快:nginx-1.15.5 vs mongols-1.2.3
nginx是多进程web服务器的优秀代表. 本文要用mongols-1.2.3实现一个比nginx更快的多进程的web服务器. mongols是C++ 服务器基础设施库, 它的主要特性如下: tcp ...
- Azure上搭建ActiveMQ集群-基于ZooKeeper配置ActiveMQ高可用性集群
ActiveMQ从5.9.0版本开始,集群实现方式取消了传统的Master-Slave方式,增加了基于ZooKeeper+LevelDB的实现方式. 本文主要介绍了在Windows环境下配置基于Zoo ...
- RDLC报表数据集的一个细节,导致错误为 尚未数据源提供数据源实例
报表中,数据集的名字DataSet_CZ, 这里报表这样加载,视乎是的. reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporti ...
- 使用4K分辨率,然后放大DIP200%,软件界面异常.
简单:WFM主界面.AutoScaleMode 选中DIP,然后使用表格容器,容器分割,容器.就可以快速迁移旧程序. 复杂点:读取桌面分辨率,DIP放大....