我正在尝试使用.NET Core,但是我一直试图将multipart / form-data转换为应用程序/八位位组流以通过PUT请求发送。任何人都有我可以借的专业知识吗?
[HttpPost("fooBar"), ActionName("FooBar")]
public async Task<IActionResult> PostFooBar() {
HttpResponseMessage putResponse = await _httpClient.PutAsync(url, HttpContext.Request.Body);
}
更新:我认为这里可能有两个问题:
我的输入格式是multipart / form-data,所以我需要从表单数据中拆分文件。
我的输出格式必须为应用程序八位字节流,但PutAsync期望为HttpContent
。
答案 0 :(得分:0)
结果请求具有一个Form属性,该Form属性包含一个Files属性,该属性具有OpenReadStream()函数,可以将其转换为流。我不确定我到底应该怎么知道。
无论哪种方式,这都是解决方法:
StreamContent stream = new StreamContent(HttpContext.Request.Form.Files[0].OpenReadStream());
HttpResponseMessage putResponse = await _httpClient.PutAsync(url, stream);
答案 1 :(得分:0)
我一直在尝试做类似的事情并且遇到问题。我需要使用预先签名的URL将大文件(> 1.5GB)放入Amazon S3的存储桶中。 .NET在Amazon上的实现对于大型文件将失败。
这是我的解决方法:
static HttpClient client = new HttpClient();
client.Timeout = TimeSpan.FromMinutes(60);
static async Task<bool> UploadLargeObjectAsync(string presignedUrl, string file)
{
Console.WriteLine("Uploading " + file + " to bucket...");
try
{
StreamContent strm = new StreamContent(new FileStream(file, FileMode.Open, FileAccess.Read));
strm.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
HttpResponseMessage putRespMsg = await client.PutAsync(presignedUrl, strm);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return false;
}
return true;
}