天天看點

Posted content type isn't multipart/form-data

版權聲明:歡迎轉載,請注明沉默王二原創。 https://blog.csdn.net/qing_gee/article/details/48712507

在有檔案上傳的表單送出過程中,搞不好就會報

Posted content type isn't multipart/form-data

的錯誤。

解決辦法

<form class="form-horizontal" action="${ctx}/project/addProjectReback?callbackType=closeCurrent" 
    enctype="multipart/form-data" method="post" onsubmit="return iframeCallback(this, dialogAjaxDone)">

<input type="file" name="image" class="required" accept="image/gif, image/jpeg, image.png">           
  1. enctype="multipart/form-data"

    必須有這段代碼。
  2. 必須對該上傳檔案類型的表單進行封裝,區分普通的表單上傳。
/**
 * 帶檔案上傳的ajax表單送出
 * 
 * @param {Object}
 *            form
 * @param {Object}
 *            callback
 */
function iframeCallback(form, callback) {
    YUNM.debug("帶檔案上傳處理");

    var $form = $(form), $iframe = $("#callbackframe");

    // 富文本編輯器
    $("div.editor", $form).each(
            function() {
                var $this = $(this);
                var editor = "<input type='hidden' name='" + $this.attr("name") + "' value='"
                        + $.base64.btoa($this.html()) + "' />";
                $form.append(editor);
            });

    var data = $form.data('bootstrapValidator');
    if (data) {
        if (!data.isValid()) {
            return false;
        }
    }

    if ($iframe.size() == 0) {
        $iframe = $("<iframe id='callbackframe' name='callbackframe' src='about:blank' style='display:none'></iframe>")
                .appendTo("body");
    }
    if (!form.ajax) {
        $form.append('<input type="hidden" name="ajax" value="1" />');
    }
    form.target = "callbackframe";

    _iframeResponse($iframe[0], callback || YUNM.ajaxDone);
}
function _iframeResponse(iframe, callback) {
    var $iframe = $(iframe), $document = $(document);

    $document.trigger("ajaxStart");

    $iframe.bind("load", function(event) {
        $iframe.unbind("load");
        $document.trigger("ajaxStop");

        if (iframe.src == "javascript:'%3Chtml%3E%3C/html%3E';" || // For
        // Safari
        iframe.src == "javascript:'<html></html>';") { // For FF, IE
            return;
        }

        var doc = iframe.contentDocument || iframe.document;

        // fixing Opera 9.26,10.00
        if (doc.readyState && doc.readyState != 'complete')
            return;
        // fixing Opera 9.64
        if (doc.body && doc.body.innerHTML == "false")
            return;

        var response;

        if (doc.XMLDocument) {
            // response is a xml document Internet Explorer property
            response = doc.XMLDocument;
        } else if (doc.body) {
            try {
                response = $iframe.contents().find("body").text();
                response = jQuery.parseJSON(response);
            } catch (e) { // response is html document or plain text
                response = doc.body.innerHTML;
            }
        } else {
            // response is a xml document
            response = doc;
        }

        callback(response);
    });
}           

另外,關于jfinal的檔案上傳,請參照

jfinal檔案上傳

笑對現實的無奈,不能後退的時候,不再傍徨的時候,永遠向前 路一直都在──陳奕迅《路一直都在》

本文出自:【

沉默王二的部落格

繼續閱讀