【发布时间】:2017-09-16 13:13:14
【问题描述】:
我正在探索 Azure Functions。到目前为止,我测试的场景效果很好。
我正试图找出一种通过 Azure 函数上传文件 (20MB+) 的方法。
这个想法是,Azure 函数将首先验证是否允许经过身份验证的用户上传文件,然后再保留请求的流并将其保存到 BLOB 存储。
这是来自客户端的代码,它创建一个StreamContent 以将字节传送到服务器:
using (Stream fileStream = ...)
{
var streamContent = new StreamContent(fileStream);
streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
streamContent.Headers.ContentLength = fileStream.Length;
streamContent.Headers.Add("FileId", fileId);
var responseMessage = await m_httpClient.PutAsync(<validURI>, streamContent);
responseMessage.EnsureSuccessStatusCode();
succeeded = true;
}
这是服务器端的代码。
[FunctionName("upload-data")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "put")]HttpRequestMessage req, TraceWriter log)
{
try
{
// Initialize stuff.
// Validate authenticated user & privileges.
// Get the content stream of the request and
// save it in the BLOB storage.
return req.CreateResponse(HttpStatusCode.OK);
}
catch (Exception exc)
{
return req.CreateResponse(HttpStatusCode.InternalServerError, exc);
}
}
我在方法的开头放置了一个断点。无论文件有多大,我都希望在客户端发送请求后立即触发断点。然而事实并非如此。
我猜测 Azure 函数在调用该方法之前以某种方式尝试获取请求正文的所有内容。我还认为我发送的文件可能超过了基础 Web 作业的 4 MB 限制,但我没有看到配置它的方法。
是否可以通过流式传输将大文件上传到 Azure 函数? 有没有办法让这个工作?
【问题讨论】:
标签: c# azure file-upload streaming azure-functions