Asp.netコアWeb APIでMultipart-form-dataファイルをアップロードするにはどうすればよいですか?単一のPOSTでJSONと画像の両方をPOST同時に実行できますか?
アップデート-.net core 2.0 +
。net coreを使用すると、新しいIFormFile
インターフェイスを活用して、同じ投稿に画像とプロパティの両方をアップロードできます。例えば:
[HttpPost("content/upload-image")]
public async Task<IActionResult> UploadImage(MyFile upload)
MyFileクラスは次のようになります。
public class MyFile
{
public string userId { get; set; }
public IFormFile File { get; set; }
// Other properties
}
properties
およびfile
にアクセスするには、次のようにします。
var file = upload.File // This is the IFormFile file
var param = upload.userId // param
ファイルをディスクに永続化/保存するには、次の操作を実行できます。
using (var stream = new FileStream(path, FileMode.Create))
{
await file.File.CopyToAsync(stream);
}
。NET Framework
はい、そうです。クライアントに応じてFramework使用している場合、Web APIをContent Type-Multipartに設定してから、次のように実行できます。
[HttpPost]
[Route("content/upload-image")]
public async Task<HttpResponseMessage> Post()
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
// enter code here
}
イメージを保存するディレクトリを定義および設定します。
var root = HttpContext.Current.Server.MapPath("~/Content/Images/");
if (!Directory.Exists(root))
{
Directory.CreateDirectory(root);
}
StreamProviderをセットアップし、modelデータの取得を試みます。これは[〜#〜] json [〜#〜]でした。
var streamProvider = new MultipartFormDataStreamProvider(root);
var result =
await Request.Content.ReadAsMultipartAsync(streamProvider);
if (result.FormData["model"] == null)
{
throw new HttpResponseException(HttpStatusCode.BadRequest);
}
リクエスト内のファイルにアクセスします。
try
{
// Deserialize model data to your own DTO
var model = result.FormData["model"];
var formDto = JsonConvert
.DeserializeObject<MyDto>(model, new IsoDateTimeConverter());
var files = result.FileData.ToList();
if (files != null)
{
foreach (var file in files)
{
// Do anything with the file(s)
}
}
}