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."}]}
我错过了什么?
答案 0 :(得分:0)
终于搞清楚了。这里有两件事很重要: 1.参数名称必须是“media”,而不是“media []” 2.不要设置contentType属性。它可以防止自动创建具有正确边界值的Content-Type标头。
正确的选项对象如下所示:
var options = { "oAuthServiceName":"twitter", "oAuthUseToken":"always", method: "POST", payload: { "media" : imageblob } };