javascript - 提交带有base64编码文件的Dropzone.js

标签 javascript forms dropzone.js

我正在尝试对来自 dropzone.js 的文件进行 base64 编码,然后使用 PJAX 将其发送到处理程序页面。但是,我遇到了 base64_data 在 POST 请求中为空的问题。

$(document).ready(function(){
    Dropzone.autoDiscover = false;
    $("#file-form").dropzone({
        paramName: 'file',
        clickable: true,
        maxFilesize: 1,
        uploadMultiple: false,
        autoProcessQueue: false,
        accept: function(file, done){
            reader = new FileReader();
            reader.onload = handleReaderLoad;
            reader.readAsDataURL(file);
            function handleReaderLoad(evt) {
                document.getElementById("id_base64_data")
                    .setAttribute('value', evt.target.result);
            }
            document.getElementById("id_base64_name")
                .setAttribute('value', file.name);
            document.getElementById("id_base64_content_type")
                .setAttribute('value', file.type);
            form = $('#file-form');
            $.pjax( {
                method: "POST",
                container: "#pjax-container", 
                timeout: 2000,
                url: "/upload/",
                data: form.serialize(),
            });
            done();
        },
    });
});

表格:

<form class="form-horizontal dropzone dz-clickable" id="file-form" action="/upload/" method="post" enctype="multipart/form-data" name="file-form">
    <input id="id_base64_data" name="base64_data" type="hidden">
    <input id="id_base64_name" name="base64_name" type="hidden">
    <input id="id_base64_content_type" name="base64_content_type" type="hidden">
    <div class="fileupload fileupload-new" data-provides="fileupload">
        <legend>Search for file</legend>
    </div>
<div class="dz-default dz-message"><span>Drop files here to upload</span></div>
</form>

有什么提示吗?

最佳答案

在发送 pjax 请求后执行延迟的 handleReaderLoad 是一个问题。工作示例:

$(document).ready(function(){
    Dropzone.autoDiscover = false;
    $("#file-form").dropzone({
        paramName: 'file',
        clickable: true,
        maxFilesize: 1,
        uploadMultiple: false,
        autoProcessQueue: false,
        accept: function(file, done){
            reader = new FileReader();
            reader.onload = handleReaderLoad;
            reader.readAsDataURL(file);
            function handleReaderLoad(evt) {
                document.getElementById("id_base64_data")
                    .setAttribute('value', evt.target.result);
                document.getElementById("id_base64_name")
                    .setAttribute('value', file.name);
                document.getElementById("id_base64_content_type")
                    .setAttribute('value', file.type);
                form = $('#file-form');
                $.pjax( {
                    method: "POST",
                    container: "#pjax-container", 
                    timeout: 2000,
                    url: "/upload/",
                    data: form.serialize(),
                });
            }
            done();
        },
    });
});

关于javascript - 提交带有base64编码文件的Dropzone.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20127717/

相关文章:

dropzone.js - Dropzone.js和每个文件的完整路径

javascript - 使用 jQuery 获取 Dropzone 实例/对象

javascript - 在移动 safari 中是否有使用 onbeforeunload 的替代方法?

javascript - 使用 jquery 更改后复选框未提交

javascript - 哪些代码将在浏览器的主线程上运行?

javascript - 如何触发延迟的 jQuery 事件?

javascript - 将动态生成的文本框值发送到 C# Controller ?

javascript - 如何删除现有的文件拖放区?

javascript - 文本区域上的智能感知插件?

javascript - 单个页面上的多个导航和页面