HttpRequest.Files is empty when posting file through HttpClient

前端 未结 4 2049
無奈伤痛
無奈伤痛 2020-12-06 02:29

Server-side:

    public HttpResponseMessage Post([FromUri]string machineName)
    {
        HttpResponseMessage result = null;
        var httpRequest = Http         


        
4条回答
  •  醉酒成梦
    2020-12-06 02:47

    Try this method :

        public void UploadFilesToRemoteUrl()
        {
            string[] files = { @"your file path" };
    
            string url = "Your url";
            long length = 0;
            string boundary = "----------------------------" +
            DateTime.Now.Ticks.ToString("x");
    
            HttpWebRequest httpWebRequest2 = (HttpWebRequest)WebRequest.Create(url);
            httpWebRequest2.ContentType = "multipart/form-data; boundary=" +
            boundary;
            httpWebRequest2.Method = "POST";
            httpWebRequest2.KeepAlive = true;
            httpWebRequest2.Credentials =
            System.Net.CredentialCache.DefaultCredentials;
    
            Stream memStream = new System.IO.MemoryStream();
    
            byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" +
            boundary + "\r\n");
    
            string formdataTemplate = "\r\n--" + boundary +
            "\r\nContent-Disposition: form-data; name=\"{0}\";\r\n\r\n{1}";
    
            memStream.Write(boundarybytes, 0, boundarybytes.Length);
    
            string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n Content-Type: application/octet-stream\r\n\r\n";
    
            for (int i = 0; i < files.Length; i++)
            {
    
                //string header = string.Format(headerTemplate, "file" + i, files[i]);
                string header = string.Format(headerTemplate, "uplTheFile", files[i]);
    
                byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
    
                memStream.Write(headerbytes, 0, headerbytes.Length);
    
                FileStream fileStream = new FileStream(files[i], FileMode.Open,
                FileAccess.Read);
                byte[] buffer = new byte[1024];
    
                int bytesRead = 0;
    
                while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    memStream.Write(buffer, 0, bytesRead);
                }
    
                memStream.Write(boundarybytes, 0, boundarybytes.Length);
                fileStream.Close();
            }
    
            httpWebRequest2.ContentLength = memStream.Length;
    
            Stream requestStream = httpWebRequest2.GetRequestStream();
    
            memStream.Position = 0;
            byte[] tempBuffer = new byte[memStream.Length];
            memStream.Read(tempBuffer, 0, tempBuffer.Length);
            memStream.Close();
            requestStream.Write(tempBuffer, 0, tempBuffer.Length);
            requestStream.Close();
    
            WebResponse webResponse2 = httpWebRequest2.GetResponse();
    
            Stream stream2 = webResponse2.GetResponseStream();
            StreamReader reader2 = new StreamReader(stream2);
    
            webResponse2.Close();
            httpWebRequest2 = null;
            webResponse2 = null;
        }
    

提交回复
热议问题