• 表单发送文件及加自定义参数



    /****************************************************************************************
    ** 作者: Eddie Xu 
    ** 时间: 2017/12/7 20:16:44
    ** 版本: V1.0.0
    ** CLR: 4.0.30319.42000
    ** GUID: c76c1823-494c-4fb3-8f3e-0d957eaa4089
    ** 机器名: DESKTOP-ECII567
    ** 描述: 尚未编写描述
    ****************************************************************************************/

    using Manjinba.Communication.Common.Logging;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Threading.Tasks;

    namespace Manjinba.Communication.Common.Utils
    {
    public class HttpUploadUtil
    {
    private ArrayList bytesArray;
    private Encoding encoding = Encoding.UTF8;
    private string boundary = String.Empty;

    public HttpUploadUtil()
    {
    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 + "-- ";
    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="requestUrl">请求url</param>
    /// <param name="responseText">响应</param>
    /// <returns></returns>
    public bool Upload(String requestUrl, long? rangeS, long? rangeE, out String responseText)
    {
    //WebClient webClient = new WebClient();
    var webRequest = (HttpWebRequest)WebRequest.Create(requestUrl);
    try
    {
    webRequest.ContentType = "multipart/form-data; boundary=" + boundary;
    //webRequest.Headers.Add("Content-Type", "multipart/form-data; boundary=" + boundary);
    if (rangeS != null && rangeE != null)
    webRequest.AddRange(rangeS ?? 0, rangeE ?? 0);

    //byte[] responseBytes;
    byte[] bytes = MergeContent();
    //responseBytes = webClient.UploadData(requestUrl, bytes);
    webRequest.ContentLength = bytes.Length;
    webRequest.Method = "POST";
    using (Stream stream = webRequest.GetRequestStream())
    {
    stream.Write(bytes, 0, bytes.Length);
    }
    HttpWebResponse httpWebResponse = (HttpWebResponse)webRequest.GetResponse();
    StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
    responseText = streamReader.ReadToEnd();
    return true;
    }
    catch (Exception e)
    {
    LogHelper.GetLog().Error(e.Message + e.StackTrace);
    }
    //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);
    responseText = string.Empty;
    return false;
    }

    /// <summary>
    /// 设置表单数据字段
    /// </summary>
    /// <param name="fieldName">字段名</param>
    /// <param name="fieldValue">字段值</param>
    /// <returns></returns>
    public void SetFieldValue(String fieldName, String fieldValue)
    {
    string httpRow = "--" + boundary + " Content-Disposition: form-data; name="{0}" {1} ";
    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 = " ";
    string httpRow = "--" + boundary + " Content-Disposition: form-data; name="{0}"; filename="{1}" Content-Type: {2} ";
    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);
    }

    /// <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, int partNum, long blocksize)
    {
    string end = " ";
    string httpRow = "--" + boundary + " Content-Disposition: form-data; name="{0}"; blocknum={3}; blocksize={4}; filename="{1}" Content-Type: {2} ";
    string httpRowData = String.Format(httpRow, fieldName, filename, contentType, partNum, blocksize);

    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);
    }
    }
    }

  • 相关阅读:
    Python学习(四十一)—— Djago进阶
    Python学习(四十)—— Djago之认证系统
    Python学习(三十九)—— Django之Form组件
    Python学习(三十八)—— Djago之Ajax
    Python学习(三十七)—— 模板语言之自定义filter和中间件
    Python学习(三十六)—— Cookie、Session和自定义分页
    Python学习(三十五)—— Django之ORM训练专题
    Python学习(三十四)—— Django之ORM之单表、联表操作
    Python学习(三十三)—— Django之ORM
    JavaSE学习心得笔记(持续更新)
  • 原文地址:https://www.cnblogs.com/Nine4Cool/p/10540652.html
Copyright © 2020-2023  润新知