我遵循了本指南http://jaliyaudagedara.blogspot.com/2014/08/how-to-directly-upload-files-to-amazon.html,并且我能够在我的Web API项目中成功将文件上传到Amazon S3。对结果感到满意,我决定从客户端添加剩余的JSON逻辑。该屏幕是一个创建用户屏幕,也有一个文件上传器。我想立即发送所有用户数据和上传文件,而不是使用多个电话。
这可能吗?如果是这样,我应该如何调整引用的示例,以便它可以接受JSON和上传的文件?
[HttpPost]
[Route("Employees/Upload")]
public async Task<HttpResponseMessage> Upload()
{
StorageService storageService = new StorageService();
if (!Request.Content.IsMimeMultipartContent())
{
this.Request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
}
InMemoryMultipartStreamProvider provider = await Request.Content.ReadAsMultipartAsync<InMemoryMultipartStreamProvider>(new InMemoryMultipartStreamProvider());
NameValueCollection formData = provider.FormData;
string userName = formData["UserName"];
IList<HttpContent> files = provider.Files;
HttpContent file = files[0];
Stream fileStream = await file.ReadAsStreamAsync();
storageService.UploadFile("your bucketname", userName, fileStream);
string preSignedUrl = storageService.GeneratePreSignedURL("your bucketname", userName, 3000);
return this.Request.CreateResponse(HttpStatusCode.OK, new { preSignedUrl });
}
答案 0 :(得分:1)
是的,可以在POST和文件中捕获表单数据,但不像其他API调用那样捕获JSON。
看看Fiddler中的表格帖子。您应该在文本视图选项卡上看到类似的内容:
------WebKitFormBoundary9j1TS9WuwcTWV7OX
Content-Disposition: form-data; name="RecordTypeId"
120
------WebKitFormBoundary9j1TS9WuwcTWV7OX
Content-Disposition: form-data; name="RecordId"
1251857
------WebKitFormBoundary9j1TS9WuwcTWV7OX
Content-Disposition: form-data; name="Tags"
------WebKitFormBoundary9j1TS9WuwcTWV7OX
Content-Disposition: form-data; name="Resource"; filename="sampleUpload1.txt"
Content-Type: text/plain
Sample upload file 1
------WebKitFormBoundary9j1TS9WuwcTWV7OX--
在这个例子中,我的表单有一个&#34; RecordTypeId&#34;,&#34; RecordId&#34;和&#34;标签&#34;表格上的字段。因此,您可以从&#34; provider.FormData&#34;中读取该数据,就像您使用用户名一样。
因此,JSON对象中的每一段数据都会显示在表单数据中。