最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Submitting Dropzone.js with base64 encoding file - Stack Overflow

programmeradmin2浏览0评论

I am trying to base64 encode file from a dropzone.js and send it to a handler page using PJAX. However I have an issue with base64_data being empty in a POST request.

$(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:

<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>

Any hint?

I am trying to base64 encode file from a dropzone.js and send it to a handler page using PJAX. However I have an issue with base64_data being empty in a POST request.

$(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:

<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>

Any hint?

Share Improve this question asked Nov 21, 2013 at 17:20 Ruslan OsipovRuslan Osipov 5,8434 gold badges30 silver badges44 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 14

It was an issue with deferred handleReaderLoad being executed after the pjax request is sent. Working example:

$(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();
        },
    });
});
发布评论

评论列表(0)

  1. 暂无评论