小编典典

使用C#通过HTTP POST发送文件

c#

我一直在搜索和阅读有关内容,但找不到任何真正有用的东西。

我正在编写一个小型C#win应用程序,该应用程序允许用户将文件发送到Web服务器,而不是通过FTP,而是通过使用POST的HTTP。可以将其视为Web表单,但可以在Windows应用程序上运行。

我有这样的东西创建我的HttpWebRequest对象

HttpWebRequest req = WebRequest.Create(uri) as HttpWebRequest

并且还设置了MethodContentTypeContentLength属性。但这就是我能走的很远。

这是我的代码:

HttpWebRequest req = WebRequest.Create(uri) as HttpWebRequest;
req.KeepAlive = false;
req.Method = "POST";
req.Credentials = new NetworkCredential(user.UserName, user.UserPassword);
req.PreAuthenticate = true;
req.ContentType = file.ContentType;
req.ContentLength = file.Length;
HttpWebResponse response = null;

try
{
    response = req.GetResponse() as HttpWebResponse;
}
catch (Exception e) 
{
}

所以我的问题基本上是我该如何通过HTTP POST用C#发送文件(文件,图像,音频等)。

谢谢!


阅读 1265

收藏
2020-05-19

共1个答案

小编典典

使用.NET 4.5(或通过从NuGet
添加Microsoft.Net.Http包的.NET 4.0 ),可以模拟表单请求。这是一个例子:

private async Task<System.IO.Stream> Upload(string actionUrl, string paramString, Stream paramFileStream, byte [] paramFileBytes)
{
    HttpContent stringContent = new StringContent(paramString);
    HttpContent fileStreamContent = new StreamContent(paramFileStream);
    HttpContent bytesContent = new ByteArrayContent(paramFileBytes);
    using (var client = new HttpClient())
    using (var formData = new MultipartFormDataContent())
    {
        formData.Add(stringContent, "param1", "param1");
        formData.Add(fileStreamContent, "file1", "file1");
        formData.Add(bytesContent, "file2", "file2");
        var response = await client.PostAsync(actionUrl, formData);
        if (!response.IsSuccessStatusCode)
        {
            return null;
        }
        return await response.Content.ReadAsStreamAsync();
    }
}
2020-05-19