本文共 4406 字,大约阅读时间需要 14 分钟。
上代码:
客户端代码
public static string Upload(string url, string fileName){ HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; Stream postStream = new MemoryStream(); #region 处理Form表单文件上传 //通过表单上传文件 string boundary = "----" + DateTime.Now.Ticks.ToString("x"); string formdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n"; try { //准备文件流 using (var fileStream = FileToStream(fileName)) { var formdata = string.Format(formdataTemplate, "", System.IO.Path.GetFileName(fileName) /*Path.GetFileName(fileName)*/); var formdataBytes = Encoding.UTF8.GetBytes(postStream.Length == 0 ? formdata.Substring(2, formdata.Length - 2) : formdata);//第一行不需要换行 postStream.Write(formdataBytes, 0, formdataBytes.Length); //写入文件 byte[] buffer = new byte[1024]; int bytesRead = 0; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) { postStream.Write(buffer, 0, bytesRead); } } } catch (Exception ex) { throw ex; } //结尾 var footer = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); postStream.Write(footer, 0, footer.Length); request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary); #endregion request.ContentLength = postStream != null ? postStream.Length : 0; request.Accept = "*/*"; //request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; request.KeepAlive = true; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36"; #region 输入二进制流 if (postStream != null) { postStream.Position = 0; //直接写入流 Stream requestStream = request.GetRequestStream(); byte[] buffer = new byte[1024]; int bytesRead = 0; while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0) { requestStream.Write(buffer, 0, bytesRead); } postStream.Close();//关闭文件访问 } #endregion HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (Stream responseStream = response.GetResponseStream()) { using (StreamReader myStreamReader = new StreamReader(responseStream,Encoding.GetEncoding("utf-8"))) { string retString = myStreamReader.ReadToEnd(); return retString; } }}
FileToStream方法,文件转stream
public static Stream FileToStream(string fileName){ // 打开文件 FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); // 读取文件的 byte[] byte[] bytes = new byte[fileStream.Length]; fileStream.Read(bytes, 0, bytes.Length); fileStream.Close(); // 把 byte[] 转换成 Stream Stream stream = new MemoryStream(bytes); return stream;}
服务端代码:
public string Upload_File(){ try { HttpFileCollection file_list = HttpContext.Current.Request.Files; if (file_list != null && file_list.Count > 0) { string str = string.Empty; for (int i = 0; i < file_list.Count; i++) { HttpPostedFile file = file_list[i]; string type = file.ContentType;//获取文件类型 string FileName = file.FileName; string guid = ""; if (FileName != null && FileName != "") { string FileType = FileName.Substring(FileName.LastIndexOf(".") + 1);//得到文件的后缀名 guid = DateTime.Now.ToString("yyyyMMddhhmmss") + FileName;//得到重命名的文件名 //定义文件存放的目标路径 string targetDir = HttpContext.Current.Server.MapPath("~/UpLoad/" + DateTime.Now.ToString("yyyy-MM-dd") + "/file"); //创建目标路径 Directory.CreateDirectory(targetDir); string path = Path.Combine(targetDir, Path.GetFileName(guid)); file.SaveAs(path); str = str + "/UpLoad/" + DateTime.Now.ToString("yyyy-MM-dd") + "/file/" + guid; } } return "上传成功," + str; } else return "文件不存在"; } catch(Exception ex) { return "上传失败," + ex.Message; }}
转载地址:http://auulf.baihongyu.com/