不解释,只是贴贴代码
控制台:
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Windows.Forms; namespace uploadFile { class Program { private static Bitmap bitmap = null; private static string userName = Environment.MachineName; static void Main(string[] args) { ExecCutScreen(); Console.ReadLine(); } /// <summary> /// 全屏截图 /// </summary> public static void ExecCutScreen() { bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics gp = Graphics.FromImage(bitmap); gp.CopyFromScreen(new Point(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y), new Point(0, 0), bitmap.Size, CopyPixelOperation.SourceCopy); try { string newImg = Guid.NewGuid().ToString(); ; //判断图片是否存在,存在将其删除,用新的替代 if (File.Exists(newImg)) { File.Delete(newImg); } //bitmap.Save("D://"+ newImg, ImageFormat.Png); UploadImg(userName, BmpToByte(bitmap)); } catch (Exception ex) { } finally { gp.Dispose(); bitmap.Dispose(); } } public static void UploadImg(string userName, byte[] fileBytepdf) { var httpUpload = new HttpUpload(); httpUpload.SetFieldValue("userName", userName); string _apiUrl = "http://localhost:54556/api/UploadFile"; httpUpload.SetFieldValue("img.png", "img.png", "application/octet-stream", fileBytepdf); string responStr = ""; bool suc = httpUpload.Upload(_apiUrl, out responStr); Console.WriteLine(suc); Console.ReadLine(); } public static byte[] BmpToByte(Bitmap bitmap) { MemoryStream ms = new MemoryStream(); bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png); byte[] bytes = ms.GetBuffer(); ms.Close(); return bytes; } } }
HttpUpload类:
using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; namespace uploadFile { public class HttpUpload { private ArrayList bytesArray; private Encoding encoding = Encoding.UTF8; private string boundary = String.Empty; public HttpUpload() { bytesArray = new ArrayList(); string flag = DateTime.Now.Ticks.ToString("x"); boundary = "---------------------------" + flag; } /// <summary> /// 合并请求数据 /// </summary> /// <returns></returns> private byte[] MergeContent() { int length = 0; int readLength = 0; string endBoundary = "--" + boundary + "--\r\n"; byte[] endBoundaryBytes = encoding.GetBytes(endBoundary); bytesArray.Add(endBoundaryBytes); foreach (byte[] b in bytesArray) { length += b.Length; } byte[] bytes = new byte[length]; foreach (byte[] b in bytesArray) { b.CopyTo(bytes, readLength); readLength += b.Length; } return bytes; } /// <summary> /// 上传 /// </summary> /// <param name="requestUrl">请求url</param> /// <param name="responseText">响应</param> /// <returns></returns> public bool Upload(String requestUrl, out String responseText) { WebClient webClient = new WebClient(); webClient.Headers.Add("Content-Type", "multipart/form-data; boundary=" + boundary); byte[] responseBytes; byte[] bytes = MergeContent(); try { responseBytes = webClient.UploadData(requestUrl, bytes); responseText = System.Text.Encoding.UTF8.GetString(responseBytes); return true; } catch (WebException ex) { Stream responseStream = ex.Response.GetResponseStream(); responseBytes = new byte[ex.Response.ContentLength]; responseStream.Read(responseBytes, 0, responseBytes.Length); } responseText = System.Text.Encoding.UTF8.GetString(responseBytes); return false; } /// <summary> /// 设置表单数据字段 /// </summary> /// <param name="fieldName">字段名</param> /// <param name="fieldValue">字段值</param> /// <returns></returns> public void SetFieldValue(String fieldName, String fieldValue) { string httpRow = "--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}\r\n"; string httpRowData = String.Format(httpRow, fieldName, fieldValue); bytesArray.Add(encoding.GetBytes(httpRowData)); } /// <summary> /// 设置表单文件数据 /// </summary> /// <param name="fieldName">字段名</param> /// <param name="filename">字段值</param> /// <param name="contentType">内容内型</param> /// <param name="fileBytes">文件字节流</param> /// <returns></returns> public void SetFieldValue(String fieldName, String filename, String contentType, Byte[] fileBytes) { string end = "\r\n"; string httpRow = "--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n"; string httpRowData = String.Format(httpRow, fieldName, filename, contentType); byte[] headerBytes = encoding.GetBytes(httpRowData); byte[] endBytes = encoding.GetBytes(end); byte[] fileDataBytes = new byte[headerBytes.Length + fileBytes.Length + endBytes.Length]; headerBytes.CopyTo(fileDataBytes, 0); fileBytes.CopyTo(fileDataBytes, headerBytes.Length); endBytes.CopyTo(fileDataBytes, headerBytes.Length + fileBytes.Length); bytesArray.Add(fileDataBytes); } } }
WebApi控制器:
public IHttpActionResult UploadPhoto() { string userName = HttpContext.Current.Request["userName"]; HttpFileCollection files = HttpContext.Current.Request.Files; foreach (string key in files.AllKeys) { HttpPostedFile file = files[key];//file.ContentLength文件长度 if (string.IsNullOrEmpty(file.FileName) == false) { string ext = Path.GetExtension(file.FileName); string newFileName = userName +"_"+ DateTime.Now.ToString("yyyyMMddHHmmss") + ext; string path = HttpContext.Current.Server.MapPath("~/App_Data/CareImg/"); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } file.SaveAs(path + newFileName); } } return Ok<string>("ok"); }