在Asp.Net Core中,如何从正文中获取multipart / form-data?

问题描述 投票:4回答:2

在Asp.Net Core中,似乎他们已经取消了Request.Content.ReadAsMultipartAsync功能,转而支持IFormFile。

这使得上传你实际文件更容易,但是,我有一个用例,我需要将文件上传到浏览器内存,处理它,然后将其作为体内多表单数据的一部分发送。 IFormFile无法看到这一点,因为没有实际要读取的文件。它仅适用于Content-Disposition上的filename属性和要上载的客户端上的实际文件。

在我的Asp.Net 4应用程序中,我可以读取正文中的mutlipart数据,无论是在边界之间发送还是作为附加文件。

我如何在.Net Core中实现这一目标?

asp.net-core multipartform-data
2个回答
1
投票

我想到的是多部分值作为键/值对的数组传递给HttpRequest.Form。正文的multipart上的“name”值确定了键的名称。

我创建了一个抓取文件和表单值的辅助方法。

public static List<FileModel> GetFileModelsFromRequest(HttpRequest request)
{
    var fileModels = new FileModels();

    foreach (var formField in request.Form)
    {
        // Form data 
        var fileModelText = formField.Value;

        ... process and add to the FileModel list
    }

    if (request.Form.Files != null && request.Form.Files.Count > 0)
    {
        foreach (var file in request.Form.Files)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                // File data
                formFile.CopyTo(ms);                    
            }

            ... process and add to the FileModel list
        }
    }

    return fileModels;
}

0
投票

我这样做了。当我不得不从网络摄像头捕获图像并处理(在浏览器中显示该图像)它在浏览器内存中,然后使用表单发布该图像。

public IActionResult Index()
{
    var files = HttpContext.Request.Form.Files;

    if (files != null)
    {
        foreach (var file in files)
        {
            var fileName = file.Name;
        }
    }

    return View();
}

我使用JS库Webcam.js从网络摄像头捕获图像并在同一页面上显示该图像。一旦用户对图像满意,他/她就可以将图像上传到服务器。

<!-- Configure settings and attach camera -->  
<script language="JavaScript">  
    Webcam.set({  
        width: 320,  
        height: 240,  
        image_format: 'jpeg',  
        jpeg_quality: 90  
    });  
    Webcam.attach('#camera');  
</script>  
<!-- handle snapshot and displaying it locally -->  
<script language="JavaScript">  
    function take_snapshot() {  
        // take snapshot and get image data  
        Webcam.snap(function (data_uri) {  
            // display results in page  
            document.getElementById('imageResults').innerHTML =  
                '<img src="' +  
                data_uri +  
                '"/>';  

            Webcam.upload(data_uri,  
                '/Default/Index',  
                function (code, text) {  
                    console.log('Photo Captured');  
                });    
        });  
    }  
</script> 

<div class="panel panel-default">  
        <div class="panel-heading">Camera</div>  
        <div class="panel-body">  
            <div id="camera"></div>  
            <!-- A button for taking snaps -->  
            <form>  
                <input type="button" class="btn btn-success" value="Take Snapshot" onClick="take_snapshot()">  
            </form>  



 <div class="panel panel-default">  
        <div class="panel-heading">Captured Image</div>  
        <div class="panel-body">  
            <div id="imageResults">captured image will appear here...</div>  
        </div>  
        <br />  
        <br />  
    </div>  

如果这是您正在寻找的,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.