示例#1
0
 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));
     }
 }
示例#2
0
 /// <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();
 }
示例#4
0
        /// <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));
        }