В Asp.Net Core, как я могу получить составные данные / данные формы из тела? - PullRequest
0 голосов
/ 16 сентября 2018

В Asp.Net Core кажется, что они покончили с функциональностью Request.Content.ReadAsMultipartAsync в пользу IFormFile.

Это значительно упрощает загрузку там, где у вас есть реальный файл, однако у меня есть случай, когда мне нужно загрузить файл в память браузера, обработать его, а затем отправить как часть данных нескольких форм в тело. IFormFile не может видеть это, поскольку нет фактического файла для чтения. Это работает, только если у вас есть свойство имени файла в Content-Disposition и фактический файл на клиенте для загрузки.

В моем приложении Asp.Net 4 я мог прочитать данные взаимного обмена в теле, независимо от того, были ли они отправлены между границами или как прикрепленный файл.

Как мне это сделать в .Net Core?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Я понял, что составные значения передаются в HttpRequest.Form в виде массива пар ключ / значение. Значение name в multipart тела определяет имя ключа.

Я создал вспомогательный метод, который захватывает как файлы, так и значения форм.

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 голосов
/ 16 сентября 2018

Я сделал это таким образом. когда мне нужно было захватить изображение с веб-камеры и обработать (показать это изображение в браузере) в памяти браузера, а затем опубликовать это изображение с помощью формы.

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>  

дай мне знать, если это то, что ты ищешь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...