【发布时间】:2014-08-09 10:54:30
【问题描述】:
我有一个用户可以在其中录制视频的应用程序和一个用于将录制的视频上传到 azure 的 api。 我正在使用下面的代码
HttpClientHandler handler = new HttpClientHandler();
handler.MaxRequestContentBufferSize = int.MaxValue;
using (HttpClient httpClient = new HttpClient(handler)
{
MaxResponseContentBufferSize = int.MaxValue
})
{
MultipartFormDataContent content = new MultipartFormDataContent();
content.Add(new ByteArrayContent(chunks), "file", fileName);
HttpResponseMessage response = null;
response = await httpClient.PostAsync(new Uri(url), content);
return await response.Content.ReadAsStringAsync();
}
这仅在视频少于 10 秒时有效。当我尝试上传大小约为 20-30 MB 的视频时,它失败了。 作为回应,我得到了状态码 404。
我还尝试了另一种上传方式。但结果是同样的错误:
string boundary = Guid.NewGuid().ToString();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "multipart/form-data;boundary=" + boundary;
StringBuilder header = new StringBuilder();
header.Append("\r\n--");
header.Append(boundary);
header.Append("\r\n");
header.Append("Content-Disposition: file; name=\"file\"; filename=\"" + fileName + "\"\r\n");
header.Append("Content-Type: application/octet-stream\r\n\r\n");
byte[] headerbytes = Encoding.UTF8.GetBytes(header.ToString());
StringBuilder footer = new StringBuilder();
footer.Append("\r\n--");
footer.Append(boundary);
footer.Append("--\r\n");
byte[] footerbytes = Encoding.UTF8.GetBytes(footer.ToString());
using (var streamWriter = await request.GetRequestStreamAsync())
{
streamWriter.Write(headerbytes, 0, headerbytes.Length);
streamWriter.Write(footerbytes, 0, footerbytes.Length);
streamWriter.Flush();
}
var httpResponse = (HttpWebResponse)await request.GetResponseAsync();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
return streamReader.ReadToEnd();
}
【问题讨论】:
标签: c# windows-phone-8 upload dotnet-httpclient