Как добавить пользовательские свойства в файл формы javascript / jquery - PullRequest
0 голосов
/ 22 ноября 2018

Я собираюсь отправить файл формы с изображениями и дополнительной информацией, такой как height и width.Я не могу понять, как добавить некоторые пользовательские реквизиты в объект формы файла.

 $("#saveImg").on('click', function () {
        var formData = new FormData(),
            allFiles = [];
    $('input[name=fileUpload]').each(function (index) {
        if (inputFileValidation(this)) {
            (function (files) {
                if (files.length != 0) { allFiles.push(files[0]); }
            })(this.files)
        }
    });

    for (var i = 0; i != allFiles.length; i++) {
        var img = new Image()
        img.src = window.URL.createObjectURL(allFiles[i]);
        $(img).on('load', function () {
            formData.append("files_h", img.naturalHeight);
            formData.append("files_w", img.naturalWidth);
            formData.append("files", allFiles[i]);
            window.URL.revokeObjectURL(allFiles[i]);
        });
    }

    $.ajax({
        url: '@Url.Action("Upload", "Image")',
        data: formData,
        processData: false,
        contentType: false,
        type: "POST",
        success: function () {}
        errors: function () {}
    });
});


[HttpPost]
public async Task<IActionResult> Upload (IList<IFormFile> files)
{
    //do something ;
}

Я также пытался:

[HttpPost]
public async Task<IActionResult> Upload (IList<IFormFile> files, IList<IFormFile> files_h, IList<IFormFile> files_w)
{
    //do something ;
}

Может быть, у вас есть другая идея, как отправить изображение с дополнительнымиданные?Я попытался преобразовать форму файла и дополнительную информацию в JSON, но это не сработало.

Редактировать Спасибо всем за ваши предложения, они действительно важны для меня, потому что я обязательно их используюв будущем.

Однако в этом проекте я уже отказался от использования file reader из-за его asynchrony и получал удовольствие от promise.Цель проста и менее javascript и более c#

Я прошу прощения за то, что ввел вас в заблуждение в названиях javascript и jquery - и отмечу ответ, связанный с c #.Я сделал это, потому что этот ответ связан с моей следующей задачей, потому что библиотека CoreCompat.System.Drawing, несомненно, все еще полезна для редактирования фотографий в будущем.

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Если вы хотите получить свойства Width и Height при загрузке изображений в ASP.NET Core.Я предлагаю вам установить этот пакет: CoreCompat.System.Drawing

Установить-пакет CoreCompat.System.Drawing -Version 1.0.0-beta006


На сервере, после сохранения ваших файлов по указанному пути.Вы можете использовать класс System.Drawing.Image для получения свойств Width и Height:

using (var image = System.Drawing.Image.FromFile(filePath))
{
    int width = image.Width;
    int height = image.Height;
}

Вам не нужно добавлять свойства files_h и files_w в модель клиента перед отправкой всервер.


А затем, используя этот способ, я отредактировал ваш код js:

 $("#saveImg").on('click', function () {
    var formData = new FormData();

    for (var input of Array.from($('input[name=fileUpload]')))
    {
        if (inputFileValidation(input) && input.files.length) {
            formData.append('files', input.files[0]);
        }
    }

    $.ajax({
        url: '@Url.Action("Upload", "Image")',
        data: formData,
        processData: false,
        contentType: false,
        type: "POST",
        success: function () {}
        errors: function () {}
    });
});
0 голосов
/ 22 ноября 2018

Это один подход ;взяты оттуда:

$('#btnUpload').click(function () {  

    // Checking whether FormData is available in browser  
    if (window.FormData !== undefined) {  

        var fileUpload = $("#FileUpload1").get(0);  
        var files = fileUpload.files;  

        // Create FormData object  
        var fileData = new FormData();  

        // Looping over all files and add it to FormData object  
        for (var i = 0; i < files.length; i++) {  
            fileData.append(files[i].name, files[i]);  
        }  

        // Adding one more key to FormData object  
        fileData.append('username', ‘Manas’);  

        $.ajax({  
            url: '/Home/UploadFiles',  
            type: "POST",  
            contentType: false, // Not to set any content header  
            processData: false, // Not to process data  
            data: fileData,  
            success: function (result) {  
                alert(result);  
            },  
            error: function (err) {  
                alert(err.statusText);  
            }  
        });  
    } else {  
        alert("FormData is not supported.");  
    }  
});  

Другой подход заключается в использовании класса FileReader для чтения загруженного файла и преобразования его в строку типа base 64.Затем вы можете отправить строку base 64 на сервер.

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