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 ...
随机推荐
- java基础语法(三大基础)
一.标识符 标识符是用于包名.类名.变量名.方法名.对象名.数组名.集合名等的命名: 规则: (1)可以使用英文字母.阿拉伯数字.下划线_.$符号 (2)不能以数字开头 (3)不能使用Java中的 ...
- 如何通过轮询实现session自动注销
每个用户在访问完网站后,经常会忽略注销账户,session默认存在的时间为30分钟,因此如果需要立即关闭session而又不用麻烦用户则可以通过轮询的方法来实现. 以下通过代码的讲解: xml配置文件 ...
- mysql修改用户密码笔记(转)
方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:my ...
- windows----------火狐浏览器访问所有https网站都显示链接不安全解决办法
1.如有以下情况,点右边的“高级”,看看自己的错误码是否为SEC_ERROR_UNKNOWN_ISSUER 2.在地址栏键入"about:config" 点击“我了解此风险” 3. ...
- C# Unity依赖注入
简介: 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的手中,在这个过程中你不是一个控制者而是一个请求者,依赖于容器提供给你的资源,控制权落到了容器 ...
- vue中样式的典型操作(:class,:style)
<template> <div class="home-wrapper"> <div class="home-top">th ...
- VMware复制CentOS7,网络配置问题处理
问题: vm安装CentOS7,静态IP配置完毕后,关闭虚机1,克隆虚拟机为2.克隆出来的虚拟机使用ip addr命令,发现网卡但和之前名称完全不一样变成ens33,也没有ip地址,但/etc/sys ...
- Angular4 组件生命周期
- angular4 使用swiper 首次加载问题(一)
angular 在使用外部插件swiper 还是有不少小坑的,下面来聊一聊.angular在使用swiper 的一些坑 一开始觉得使用外部引入的方式比较好,就在外部定义了.简单快捷方便, 但是在开发后 ...
- linux安装sz && rz功能
[1]编译安装 root 账号登陆后,依次执行以下命令: cd /tmp wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz . ./c ...