programing

WebAPI 파일 업로드 - 디스크에 파일을 쓰지 않음

sourcejob 2023. 8. 27. 09:05
반응형

WebAPI 파일 업로드 - 디스크에 파일을 쓰지 않음

FormData를 사용하여 ASP에 업로드한 파일 처리에 대한 모든 문서/자습서/질문.NET WebAPI 처리기 사용MultipartFormDataStreamProvider멀티파트 스트림을 처리하여 관련 양식 필드와 파일로 분할합니다.

var root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);

await Request.Content.ReadAsMultipartAsync(provider);

foreach (MultipartFileData file in provider.FileData)
{
   // File
}

그러나 파일은 처리 중에 자동으로 디렉터리에 기록됩니다.

제가 그냥 사용할 수 있을 때는 많은 번거로움이 있는 것 같습니다.HttpContext.Current.Request.Files[0].InputStream메모리에서 지정된 파일 스트림에 직접 액세스합니다.

어떻게 WebAPI가 사용에 따른 IO 오버헤드 없이 파일 스트림에 직접 액세스할 수 있습니까?MultipartFormDataStreamProvider?

공식 튜토리얼: http://www.asp.net/web-api/overview/advanced/sending-html-form-data,-part-2

해결됨:

기존의 단순을 사용합니다.사용자 지정 클래스 또는 제공자가 필요하지 않습니다.이것은 사용자 지정 공급자를 작성하여 솔루션을 해결한 중복 질문과 다릅니다.

그런 다음 WebAPI 핸들러에서 다음과 같이 사용합니다.

public async Task<IHttpActionResult> UploadFile()
{
    if (!Request.Content.IsMimeMultipartContent())
    {
        return StatusCode(HttpStatusCode.UnsupportedMediaType);
    }        
  
    var filesReadToProvider = await Request.Content.ReadAsMultipartAsync();
    
    foreach (var stream in filesReadToProvider.Contents)
    {
        var fileBytes = await stream.ReadAsByteArrayAsync();
    }
    return StatusCode(HttpStatusCode.OK);
}

언급URL : https://stackoverflow.com/questions/27965568/webapi-file-uploading-without-writing-files-to-disk

반응형