winform 利用Http向服务器上传与下载文件
利用在服务器端的IIS,布置“请求处理映射”。从而处理,本地发出Post请求。Url指向web网站所在路径的请求映射。由映射代码实现服务器保存文件。
winform里面使用,WebClient的对象,完成Url请求;
winform代码:文件保存的地址为服务器网站根目录下的files文件夹(需要提前创建)/
OpenFileDialog fileDialog = new OpenFileDialog
{
Multiselect = false,
Title = "请选择文件",
Filter = "所有文件(*.*)|*.*"
};
if (fileDialog.ShowDialog() == DialogResult.OK)
{
try
{
string path = Path.GetFullPath(fileDialog.FileName); //绝对路径 //显示文件路径
string fileName = Path.GetFileName(fileDialog.FileName);
WebClient wc = new WebClient();
wc.Credentials = CredentialCache.DefaultCredentials;
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
wc.QueryString["fname"] = fileDialog.SafeFileName;
byte[] fileb = wc.UploadFile(new Uri(@"http://localhost/test.ts"), "POST", path);
string res = Encoding.GetEncoding("gb2312").GetString(fileb); //文件名上传到数据库
if (DataBaseHelper.UpLoadFileName(fileName))
{
MessageBox.Show(fileName + "上传成功");
}
else
{
MessageBox.Show(fileName + "上传失败");
} }
catch(Exception ex)
{
MessageBox.Show(ex.Message + "上传失败");
} }
目标服务器的 映射处理代码:
public void ProcessRequest(HttpContext context)
{
//在此处写入您的处理程序实现。
context.Response.ContentType = "text/plain";
try
{
HttpFileCollection files = context.Request.Files;
if (files.Count > 0)
{
files[0].SaveAs(HttpContext.Current.Server.MapPath("files/" + context.Request.QueryString["fname"]));
context.Response.Write("save success!");
}
else
context.Response.Write("hello request!");
}
catch (Exception ex)
{
context.Response.Write("save error!" + ex.Message);
}
}
客户端下载文件:
FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
for (int i = 0; i < dgvContactInfo.Rows.Count; i++)
{ DataGridViewCheckBoxCell cb = (DataGridViewCheckBoxCell)this.dgvContactInfo.Rows[i].Cells[0];
bool flag = Convert.ToBoolean(cb.Value); if (flag == true)
{
try
{
string fileName = dgvContactInfo.Rows[i].Cells[1].Value.ToString(); string path = folderBrowserDialog1.SelectedPath;
WebClient wc = new WebClient();
//wc.Credentials = CredentialCache.DefaultCredentials;
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
string fileUrl = @"http://localhost/files/" + fileName; wc.DownloadFile(new Uri(fileUrl), string.Format(@"{0}\{1}", path, fileUrl.Substring(fileUrl.LastIndexOf('/') + 1))); }
catch
{ }
}
}
btw:
记得修改请求限制。我就是没修改限制,导致测试的时候一直失败,以为这个方法不行。
修改根目录的Web.config 文件里面的 <httpRuntime maxRequestLength="2048000" executionTimeout="600"/> 和 iis的配置文件,可以解除上传的文件的大小限制
建议去MSDN阅读以下,关于IIS 的“模块”和“处理程序映射”文章,里面详细介绍了如何使用 映射;
从大佬的文章中窃取的代码:https://www.cnblogs.com/farmer-y/p/6179242.html
winform 利用Http向服务器上传与下载文件的更多相关文章
- FTP服务器上传,下载文件
public class FtpUtil { /** * * @param host FTP服务器地址 * @param port FTP服务器端口 * @param username FTP登录账号 ...
- java+服务器上传和下载文件
1.介绍enctype enctype 属性规定发送到服务器之前应该如何对表单数据进行编码. enctype作用是告知服务器请求正文的MIME类型(请求消息头content-type的作用一样) 1. ...
- 利用ajax与input 上传与下载文件
html 部分代码<form action="" method="" class="form form-horizontal" nov ...
- 使用putty组件向服务器上传或下载文件
基于SSH的连接 上传文件: pscp -P 28661(portNum) -pw password sourceFilePath user@serverIP:destinationFilePath ...
- Mac iTerm2使用lrzsz上传和下载文件
Mac iTerm2使用lrzsz对服务器上传和下载文件 安装工具 首先需要安装iTerm2和homebrew,在终端中执行(打开终端,使用搜索(command + space),输入terminal ...
- 利用SecureCRT上传、下载文件(使用sz与rz命令),超实用!
利用SecureCRT上传.下载文件(使用sz与rz命令),超实用! 文章来源:http://blog.csdn.net/dongqinliuzi/article/details/39623169 借 ...
- 使用 PC 做 FTP/TFTP 服务器,上传和下载文件
使用PC做TFTP服务器,上传和下载文件需要用到一个工具软件,IPOP,可百度下载. 1.在桌面新建一个空闲的文件夹,作为TFTP服务器的存储位置,然后打开IPOP软件,开启服务. 图片中 编号3 的 ...
- 【问题解决方案】Xshell连接服务器并实现上传和下载文件
参考链接: Xshell连接服务器并实现上传和下载文件 第一步:xshell登录完成 略 第二步: 在服务器安装lrzsz 如果服务器的操作系统是 CentOS,则输入命令[yum install l ...
- SecureCRT上传和下载文件
SecureCRT上传和下载文件(下载默认目录) SecureCR 下的文件传输协议有ASCII .Xmodem .Ymodem .Zmodem ASCII:这是最快的传输协议,但只能传送文本文件. ...
随机推荐
- [物理学与PDEs]第2章习题2 质量力有势时的能量方程
试证明: 如果质量力有势, 即存在 $\phi$ 使 ${\bf F}=-\n \phi$, 那么理想流体的能量守恒方程的微分形式可写为 $$\bex \cfrac{\rd}{\rd t}\sex{e ...
- 使用SIGALARM为connect设置超时
static void connect_alarm(int); int connect_timeo(int sockfd, const SA *saptr, socklen_t salen, int ...
- Java8从对象列表中取出某个属性的列表
List<属性值类型> 属性List = 对象List.stream().map(对象::get方法()).collect(Collectors.toList()); 例如: List&l ...
- 51nod--1174 区间中最大的数 (RMQ)
题目: 1174 区间中最大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出一个有N个数的序列,编号0 - N - 1.进行Q次查询,查询编号i至j ...
- 浮点数运算的精度问题:以js语言为例
在 JavaScript 中整数和浮点数都属于 Number 数据类型,所有数字都是以 64 位浮点数形式储存,即便整数也是如此. 所以我们在打印 1.00 这样的浮点数的结果是 1 而非 1.00 ...
- vue项目移植tinymce踩坑
转载:https://segmentfault.com/a/1190000012791569?utm_source=tag-newest 2019-2-18 貌似这篇文章帮了大家一些小忙最近tinym ...
- thinkphp3.2 删除缓存文件
//删除后台缓存 public function ajaxcleanCache(){ $dir = "./Application/Runtime/Logs/Admin/"; if( ...
- mysql根据分组和条件查询以后如何统计记录的条数
1.子查询,查询出的数据随便起一个别名,然后根据分组和条件查询出的数据,作为一个具有一列的一个表,然后外面的查询查询这个数据表的这一列的总数,即可. SELECT COUNT( * ) FROM ( ...
- 数据库链接池c3p0的配置
由于我看的是远古教程,所以里面各种驱动jar包还有c3p0包都是远古版本,对于最新版本的jdbc已经失去的作用,所以我在这里重写一下! 1.首先是c3p0的位置,package的外面,src的里面 2 ...
- NumPy的思考……
问题: 为什么第一次输出矩阵形式的数据,第二次输出list形式的数据? 详见代码: a = np.array([[1, 2], [3, 4]]) print(a) print('ndim :', a. ...