jQuery чтение байта [] из поля ввода type = "file" при отправке - PullRequest
0 голосов
/ 19 марта 2020

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

<form class="submitform">
    <div class="input-group">
            <input type="file" class="custom-file-input" id="fileInput"
                   aria-describedby="fileInput" />
            <label class="custom-file-label" for="fileInput">Choose file</label>
    </div>
    <div class="modal-footer row">
        <button type="submit" class="btn btn-primary" id="submitAddFile">Submit</button>
        </div>
    </div>
</form>

Как только кнопка отправки в моей форме нажата, я хочу получить соответственно имя файла и байт []. Это я пытаюсь сделать следующим образом через jQuery:

$('#submitAddFile').click(function () {
    var file = $('#fileInput')[0].files;
    debugger;
}

А потом я вроде как не получил дальше ... Из того, что я могу прочитать через отладку, я не получаю никаких байт [], который я могу вытащить и отправить на мой контроллер. Однако я могу получить такие вещи, как размер файла и имя файла.

Следовательно, как правильно извлечь байт [], чтобы я мог сохранить его в своей базе данных

1 Ответ

0 голосов
/ 20 марта 2020

Вы можете использовать отправку формы или использовать ajax, чтобы опубликовать форму и использовать IFormFile в действии для получения вашего файла. В действии вы можете получить имя файла или преобразовать файл в byte[].

Имя параметра действия требуется для соответствия имени данных формы.

Например:

Js:

<script>
    $('#submitAddFile').click(function (e) {
        e.preventDefault();
        var file = $('#fileInput')[0].files;
        var formData = new FormData();
        formData.append("myFile", file[0]);


        $.ajax({
            type: "POST",
            url: "/Home/UploadFile",
            contentType: false,
            processData: false,
            data: formData,
            success: function (result) {
                alert("success");
            },
            error: function () {
                alert("there was an error");
            }
        });
    })
</script>

HomeController:

[HttpPost]
public void UploadFile(IFormFile myFile)
    {
        var fileName = Path.GetFileName(myFile.FileName);
        using (var ms = new MemoryStream())
        {
            myFile.CopyTo(ms);
            byte[] fileBytes = ms.ToArray();

            //save fileName and fileBytes into database
        }       

    }
...