带有文件的表单-上传到 Json-字符串到 JavaBackend

Posted

技术标签:

【中文标题】带有文件的表单-上传到 Json-字符串到 JavaBackend【英文标题】:Form with File- Upload to Json- String to JavaBackend 【发布时间】:2019-06-25 06:15:44 【问题描述】:

我有一个 html 表单,我将其解析为 json 并将其发送到我的 java 后端。

        var data = ;
        var formArray = $("#form").serializeArray();
        $.each(formArray, function (i, field) 
            if(field.name !== '') 
                data[field.name] = field.value;
            
        );

        $.ajax(
            type: "POST",
            url: encodedContextPath + "/form/send",
            data: JSON.stringify(data),
            dataType: "json",
            contentType: 'application/json'
            ........

现在我需要添加上传 pdf 文件的功能,如何将此文件放入我的 json 中,然后发送到后端? 我可以以某种方式对其进行序列化或生成可以放入 json 的数据流吗?

【问题讨论】:

pdf file upload ajax html的可能重复 【参考方案1】:

您可以使用 FileReader 获取 pdf 文件的数据并以 json 格式发送。

let pdfFile;
$('<file-input-id-or-class>').on('change', onPdfUpload);

function onPdfUpload($event) 
    let file = $event.target.files[0];
    if (!file) return;

    let reader = new FileReader();
    reader.onload = function (e) 
        pdfFile = reader.result;
    ;
    reader.readAsDataURL(file);



var data = ;
    var formArray = $("#form").serializeArray();
    $.each(formArray, function (i, field) 
        if(field.name !== '') 
            data[field.name] = field.value;
        
    );

   data.pdfFileContent = pdfFile;// you can change field name accordingly

    $.ajax(
        type: "POST",
        url: encodedContextPath + "/form/send",
        data: JSON.stringify(data),
        dataType: "json",
        contentType: 'application/json'

【讨论】:

我设法将文件发送到我的后端,但现在我正在努力从 base64 字符串中取回数据 要显示来自 Base64 的 PDF,您可以检查:***.com/questions/40674532/…

以上是关于带有文件的表单-上传到 Json-字符串到 JavaBackend的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS:如何使用多部分表单实现简单的文件上传?

表单不会使用 PHP 将带有文件上传的文本输入发布到 SQL 表

PHP表单文件上传到Mysql和服务器

带有文件上传的 Rails 3 多步骤表单

带有文件上传的AngularJs Ajax POST表单

docker容器中的django + nginx:无法上传任何带有表单的文件