public static void ValidateMaxLength(string name, FileItem value, int maxLength) { if (value != null && value.GetContent() != null && value.GetContent().Length > maxLength) { throw new WebApiException("41", string.Format("client-error:Invalid arguments:{0}", name)); } }
/// <summary> /// 提交文件 /// </summary> /// <param name="request">请求对象</param> /// <param name="fileItem">文件</param> /// <returns>响应文本</returns> public static string Post(this HttpWebRequest request, FileItem fileItem) { return(request .Method(HttpWebRequestMethod.POST) .SetContentType("application/octet-stream") .Write(fileItem.GetContent()) .GetResponseString()); }
/// <summary> /// 提交文件 /// </summary> /// <param name="request">请求对象</param> /// <param name="fileItem">文件</param> /// <returns>响应文本</returns> public static string Post(this HttpWebRequest request, FileItem fileItem) { return request .Method(HttpWebRequestMethod.POST) .SetContentType("application/octet-stream") .Write(fileItem.GetContent()) .GetResponseString(); }
/// <summary> /// 执行带文件上传的HTTP POST请求。 /// </summary> /// <param name="url">请求地址</param> /// <param name="textParams">请求文本参数</param> /// <param name="fileParams">请求文件参数</param> /// <returns>HTTP响应</returns> public string DoPost(string url, IDictionary <string, string> textParams, IDictionary <string, FileItem> fileParams) { // 如果没有文件参数,则走普通POST请求 if (fileParams == null || fileParams.Count == 0) { return(DoPost(url, textParams)); } string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线 HttpWebRequest req = GetWebRequest(url, "POST"); req.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary; System.IO.Stream reqStream = req.GetRequestStream(); byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n"); byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); // 组装文本请求参数 string textTemplate = "Content-Disposition:form-data;name=\"{0}\"\r\nContent-Type:text/plain\r\n\r\n{1}"; IEnumerator <KeyValuePair <string, string> > textEnum = textParams.GetEnumerator(); while (textEnum.MoveNext()) { string textEntry = string.Format(textTemplate, textEnum.Current.Key, textEnum.Current.Value); byte[] itemBytes = Encoding.UTF8.GetBytes(textEntry); reqStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length); reqStream.Write(itemBytes, 0, itemBytes.Length); } // 组装文件请求参数 string fileTemplate = "Content-Disposition:form-data;name=\"{0}\";filename=\"{1}\"\r\nContent-Type:{2}\r\n\r\n"; IEnumerator <KeyValuePair <string, FileItem> > fileEnum = fileParams.GetEnumerator(); while (fileEnum.MoveNext()) { string key = fileEnum.Current.Key; FileItem fileItem = fileEnum.Current.Value; string fileEntry = string.Format(fileTemplate, key, fileItem.GetFileName(), fileItem.GetMimeType()); byte[] itemBytes = Encoding.UTF8.GetBytes(fileEntry); reqStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length); reqStream.Write(itemBytes, 0, itemBytes.Length); byte[] fileBytes = fileItem.GetContent(); reqStream.Write(fileBytes, 0, fileBytes.Length); } reqStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length); reqStream.Close(); HttpWebResponse rsp = (HttpWebResponse)req.GetResponse(); Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet); return(GetResponseAsString(rsp, encoding)); }