将多部分表单发布到外部URL php

时间:2016-01-20 15:06:40

标签: javascript php jquery forms

在我的页面中,我有一个表单可以在外部服务上上传照片,该服务提供api,upload.im,我需要返回上传图像的URL。我真的无法让这个工作......

此API的文档页面为here

我在PHP页面添加了一个表单:

<form enctype="multipart/form-data" name="UploadForm" id="UploadForm" action="http://uploads.im/api" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <input type="file" name="upload" id="upload" />
    <input type="hidden" name="resize_width" id="resize_width" value="" />
    <input type="hidden" name="thumb_width" id="thumb_width" value="250" />
    <input type="hidden" name="format" id="format" value="xml" />
    <input type="submit" id="Submit" name="Submit" />
</form>

我还尝试使用此jQuery代码提交带有所选图像的表单:

$(document).ready(function () {
    $('#UploadForm').on('submit', function(e) {
        e.preventDefault();
        var data = new FormData(jQuery('UploadForm')[0]);
        jQuery.ajax({
            url: 'http://uploads.im/api',
            data: data,
            cache: false,
            contentType: false,
            processData: false,
            type: 'POST',
            success: function(data){
                console.log(data);
            }
        });
    });
});

使用此代码,我在控制台中收到错误: screen.png http://i68.tinypic.com/zmnyq8.png 这是API的错误代码;这意味着代码可以工作,但提交表单的方式是错误的。问题在哪里?

谢谢!

3 个答案:

答案 0 :(得分:3)

在这里,我刚刚在JS代码中进行了一些更改:

$(document).ready(function () {
    $('#UploadForm').on('submit', function(e) {
        e.preventDefault();
        var data = new FormData($(this));
        data.append('upload', $('#upload')[0].files[0]);

        jQuery.ajax({
            url: 'http://uploads.im/api',
            data: data,
            cache: false,
            contentType: false,
            processData: false,
            type: 'POST',
            success: function(data){
                console.log(data);
                console.log(data.data.thumb_url);
                console.log(data.data.img_url);
            }
        });
    });
});

答案 1 :(得分:1)

问题可能与这一行有关:

var data = new FormData(jQuery('UploadForm')[0]);

应为#UploadForm

答案 2 :(得分:0)

尝试如下。

CALL ECHO %%errorlevel%%

将节点传递给FormData构造函数: FormData()构造函数创建一个新的FormData对象

参数:HTML var data = new FormData( $('#UploadForm') ); 元素 - 在指定时,FormData对象将填充表单的当前键/值。它还将编码文件输入内容。

参考:https://developer.mozilla.org/en-US/docs/Web/API/FormData/FormData