【问题标题】:How to add custom properties to file form javascript / jquery如何将自定义属性添加到文件表单 javascript / jquery
【发布时间】:2019-04-24 12:36:06
【问题描述】:

我的目标是发送带有图像和附加信息的文件格式,例如 heightwidth。我不知道如何向文件表单对象添加一些自定义道具。

 $("#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,因为它的asynchronypromise 的乐趣。目标很简单,少javascriptc#

我很抱歉在标题 javascriptjquery 中误导了您 - 我标记了与 c # 相关的答案。我这样做是因为这个答案与我的下一个任务有关,因为CoreCompat.System.Drawing 库对于将来编辑照片无疑仍然有用。

谢谢!!

【问题讨论】:

  • 您的所有建议都需要使用HttpContext.Current.Request.Files - 我的控制器不知道它是什么。我正在使用 asp core mvc 2,但找不到正确的 using编辑: 更准确 - HttpContext 没有 Current。 HttpContext来自ControllerBase.HttpContext
  • 你需要注册httpcontext并作为dependecy传递

标签: javascript c# jquery asp.net-core file-upload


【解决方案1】:

如果您想在 ASP.NET Core 中上传图像时获取 WidthHeight 属性。我建议你安装这个包:CoreCompat.System.Drawing

安装包 CoreCompat.System.Drawing -Version 1.0.0-beta006


在服务器中,将文件保存到特定路径后。您可以使用System.Drawing.Image 类来获取WidthHeight 属性:

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

在发送到服务器之前,您不必向客户端模型添加 files_hfiles_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 () {}
    });
});

【讨论】:

    【解决方案2】:

    这是one approach;取自那里:

    $('#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.");  
        }  
    });  
    

    Another approach 是使用 FileReader 类读取上传的文件,将其转换为 base 64 字符串。然后你可以将base 64字符串发送到服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多