Twitter语言 - 使用 upload.json 上传图像时出现媒体错误


 getMediaBinary: function() {
    var file = document.getElementById('photo').files[0],
        reader = new FileReader(),
        deferred = $.Deferred();
    reader.onloadend = function () {
        return deferred.resolve(reader.result);
    };
    reader.readAsBinaryString(file);
    return deferred.promise();
},
getMediaData: function() {
    var file = document.getElementById('photo').files[0],
        reader = new FileReader(),
        deferred = $.Deferred();
    reader.onloadend = function () {
        return deferred.resolve(reader.result);
    };
    reader.readAsDataURL(file);
    return deferred.promise();
},
uploadMedia: function() {
  var formData = new FormData();
    $.when(JTWEET.getMediaBinary(), JTWEET.getMediaData() ).then(function(media, media_data) {
        formData.append('media', media);
        formData.append('media_data', media_data);
        return $.ajax({
            url: JTWEET.routerUrl + 'https://upload.twitter.com/1.1/media/upload.json',
            type: 'POST',
            //   data: { media: document.getElementById('photo').files[0].name, media_data: JTWEET.getMediaData() },
            data: formData,
            contentType: false,
            processData: false,
            success: function() {
                console.dir(arguments);
            },
            error: function() {
                console.dir(arguments);
            }
        });
    });
},

我收到下一个错误:

{"errors":[{"code":38,"message":"media parameter is missing."}]}

我错过了什么?

尝试检查一下这个 - https://twittercommunity.com/t/post-media-upload-json-always-returns-media-parameter-is-missing/27962

终于想通了。这里有两件事很重要: 1. 参数名称必须是"media",而不是"media[]" 2. 不要设置 contentType 属性。它可以防止自动创建具有正确边界值的内容类型标头。

正确的选项对象如下所示:

var options = {
    "oAuthServiceName":"twitter",
    "oAuthUseToken":"always",
    method: "POST",
    payload: { "media" : imageblob }
};

最新更新