将本地文件上传到指定的服务器(HttpWebRequest方法)

将本地文件上传到指定的服务器(HttpWebRequest方法),通过文件流,带文件名,同文件一同上传的表单文本域及值.

  1      ///<summary>
  2         /// 将本地文件上传到指定的服务器(HttpWebRequest方法)
  3         /// </summary>
  4         /// <param name="address">文件上传到的服务器</param>
  5         /// <param name="fileNamePath">要上传的本地文件(全路径)</param>
  6         /// <param name="saveName">文件上传后的名称</param>
  7         /// <param name="progressBar">上传进度条</param>
  8         /// <returns>成功返回1,失败返回0</returns>
  9         private string UploadRequest(string url, string filePath, string fileName)
 10         {
 11             string returnValue = "";
 12             // 要上传的文件
 13             FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
 14             BinaryReader r = new BinaryReader(fs);
 15             //时间戳
 16             string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");
 17             byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "--\r\n");
 18             //请求头部信息
 19             StringBuilder sb = new StringBuilder();
 20             sb.Append("--");
 21             sb.Append(strBoundary);
 22             sb.Append("\r\n");
 23             sb.Append("Content-Disposition: form-data; name=\"");
 24             sb.Append("file");
 25             sb.Append("\"; filename=\"");
 26             sb.Append(fileName);
 27             sb.Append("\"");
 28             sb.Append("\r\n");
 29             sb.Append("Content-Type: ");
 30             sb.Append("application/octet-stream");
 31             sb.Append("\r\n");
 32             sb.Append("\r\n");
 33             string strPostHeader = sb.ToString();
 34             System.Console.Write(strPostHeader);
 35             System.Console.Write("文件内容....");
 36             System.Console.Write("\r\n--" + strBoundary + "--\r\n");
 37             byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);
 38             // 根据uri创建HttpWebRequest对象
 39             HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(url));
 40             httpReq.Method = "POST";
 41             //对发送的数据不使用缓存
 42             httpReq.AllowWriteStreamBuffering = false;
 43             //设置获得响应的超时时间(300秒)
 44             httpReq.Timeout = 300000;
 45             httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary;
 46             long length = fs.Length + postHeaderBytes.Length + boundaryBytes.Length;
 47             long fileLength = fs.Length;
 48             httpReq.ContentLength = length;//请求内容长度
 49             try
 50             {
 51                 //每次上传5M
 52                 int bufferLength = 1024 * 1024 * 5;
 53                 byte[] buffer = new byte[bufferLength];
 54                 //已上传的字节数
 55                 long offset = 0;
 56                 //开始上传时间
 57                 DateTime startTime = DateTime.Now;
 58                 int size = r.Read(buffer, 0, bufferLength);
 59                 Stream postStream = httpReq.GetRequestStream();
 60                 //发送请求头部消息
 61                 postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
 62                 while (size > 0)
 63                 {
 64                     postStream.Write(buffer, 0, size);
 65                     offset += size;
 66
 67                     TimeSpan span = DateTime.Now - startTime;
 68                     double second = span.TotalSeconds;
 69                     lblTime.Text = "已用时:" + second.ToString("F2") + "秒";
 70                     if (second > 0.001)
 71                     {
 72                         lblSpeed.Text = " 平均速度:" + (offset / 1024 / second).ToString("0.00") + "KB/秒";
 73                     }
 74                     else
 75                     {
 76                         lblSpeed.Text = " 正在连接…";
 77                     }
 78                     lblState.Text = "已上传:" + (offset * 100.0 / length).ToString("F2") + "%";
 79                     lblSize.Text = (offset / 1048576.0).ToString("F2") + "M/" + (fileLength / 1048576.0).ToString("F2") + "M";
 80
 81                     size = r.Read(buffer, 0, bufferLength);
 82                 }
 83                 //添加尾部的时间戳
 84                 postStream.Write(boundaryBytes, 0, boundaryBytes.Length);
 85                 postStream.Close();
 86                 //获取服务器端的响应
 87                 WebResponse webResponse = httpReq.GetResponse();
 88                 Stream s = webResponse.GetResponseStream();
 89                 StreamReader sr = new StreamReader(s);
 90                 //读取服务器端返回的消息
 91                 returnValue = sr.ReadLine();
 92                 s.Close();
 93                 sr.Close();
 94
 95             }
 96             catch(Exception ex)
 97             {
 98                 returnValue = ex.Message + ex.StackTrace;
 99             }
100             finally
101             {
102                 fs.Close();
103                 r.Close();
104             }
105             return returnValue;
106         }
时间: 2024-08-07 20:12:05

将本地文件上传到指定的服务器(HttpWebRequest方法)的相关文章

JavaScript进阶 九 JS实现本地文件上传至阿里云服务器

JS实现本地文件上传至阿里云服务器 前言 在前面的博客< JavaScript进阶(八)JS实现图片预览并导入服务器功能>(点击查看详情)中,实现了JS将本地图片文件预览并上传至阿里云服务器的操作.这次需要实现将本地打包好的文件上传至阿里云服务器.使用前面的图片文件上传方法无法完成此操作.操作界面如下: 思路 本地与服务端传输文件的格式应该是熟悉的Base64格式.首先需要将本地文件转换为Base64格式,传输至服务端后,在服务端再将Base64格式的文件转换为原始文件. 源码解析 控制器 /

Mac将本地文件上传到Centos7(Linux)服务器上

1.打开终端,输入命令: scp /Users/codez/Downloads/jdk-8u144-linux-x64.tar.gz [email protected]:/root/java/jdk-8u144-linux-x64.tar.gz 2.scp 上传命令 /Users/codez/Downloads/jdk-8u144-linux-x64.tar.gz 3.表示本地上准备上传文件的路径和文件名 [email protected] 4. 表示使用root用户登录远程服务器139.224

将本地文件上传到远程git服务器

1.(先进入项目文件夹)通过命令 gitinit 把这个目录变成git可以管理的仓库 git init 2.把文件添加到本地版本库中,使用命令git add 文件:添加到暂存区里面去,如果后面接小数点".",意为添加文件夹下的所有文件 git add . 3.用命令 git commit告诉Git,把文件提交到仓库.引号内为提交说明 git commit -m 'first commit' 4.关联到远程库 git remote add origin 你的远程库地址 如: git re

微信企业号上传媒体文件之本地文件上传

微信企业号上传媒体文件之本地文件上传 企业在使用接口时,对多媒体文件.多媒体消息的获取和调用等操作,是通过media_id来进行的. 通过接口https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE,企业可以上传多媒体文件. 注意,每个多媒体文件(media_id)会在上传到微信服务器3天后自动删除,以节省服务器资源. 通常文件上传是通过html表单进行的,通过HttpURLConne

C# winform把本地文件上传到服务器上,和从服务器上下载文件

昨天在做项目过程中遇到需要把本地文件上传到服务器上的问题,在这里记录一下,方便大家互相学习! /// <summary> /// 上传文件方法/// </summary> /// <param name="filePath">本地文件所在路径(包括文件)</param> /// <param name="serverPath">文件存储服务器路径(包括文件)</param> public voi

scp. -本地文件上传服务器

scp 命令可以将本地文件上传服务器,或者将服务器上的文件下载到本地, 1.  上传服务器: scp [本地文件目录]  [服务器用户名]@[服务器名]:/[服务器上文件路径] 比如 scp /Documents/test.txt [email protected]服务器名:/home/optadmin/tmp/   将文件test.txt文件放到服务器上的tmp目录下 2.  下载本地 将服务器上的文件下载到本地时,只需要将上述 的两个路径互换即可 比如 scp  [email protect

备份部分mysql表并上传至指定ftp服务器目录中

防伪码:忘情公子著 前几天领导安排了一个任务,让写一个脚本备份某mysql数据库中的部分表,并要将备份好的文件上传至某ftp服务器中,于是就有了以下的脚本 #!/bin/bash #Filename:mysqldump.sh #Function:backup a part of tables from mysql databases then package it and put it to ftp server #Author:Forgotten Love #Date:2016-12-15 b

Vbs脚本将本地文件上传到Azure存储账户

说到Azure相信大家都已经非常熟悉了,所以就不做多介绍了,我们都知道在Azure上有一个存储账户,在存储账户下可以可以创建容器,可以存放数据,近期公司呢为了达到数据的安全性,准备将本地的备份数据给Azure存储账户下备份一份: Azure提供了很多方法可以将本地的文件上传到Azure存储账户下,比如Powershell.Azcopy.存储文件管理工具,但是存储工具和powershell不支持断点续传,只有Azcopy支持断点续传,所以我们就用Azcopy进行数据的传输,在此说一下Azcopy也

java:ssh连接服务器,实现本地文件上传和下载

1.连接至服务器:ssh [email protected] -p 5555    下载文件:scp -r [email protected]:/ccc(服务器路径,文件夹下所有文件)  /path(本地路径)    上传文件:scp /ccc(本地文件路径) 2.文件上传: import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; i