Javascript Foursquare在通过api上载照片时丢失文件上载/InvalidPhotoFormat错误

Javascript Foursquare在通过api上载照片时丢失文件上载/InvalidPhotoFormat错误,javascript,node.js,request,foursquare,Javascript,Node.js,Request,Foursquare,我正在尝试使用api:和以下node.js代码向foursquare页面添加照片: var accessToken = "myAccessToken"; var platformProfileId = "4squarePageId"; var b64content = "somebase64stringrepresentationofimage";

我正在尝试使用api:和以下node.js代码向foursquare页面添加照片:

                    var accessToken = "myAccessToken";
                    var platformProfileId = "4squarePageId";
                    var b64content = "somebase64stringrepresentationofimage";
                    var url = "https://api.foursquare.com/v2/photos/add";
                    var formObj = {'oauth_token': accessToken, v: '20151009', 'pageId': platformProfileId, 'photo': b64content};
                    request({
                        url: url, //URL to hit
                        form: formObj, //form data
                        method: 'POST',
                        headers: { 'Content-Type': 'image/jpeg' }
                    }, function(error, response, body){
                        if(error) {
                            console.log(error);
                            return cb(error);
                        } else {
                            if(typeof body != 'object') {
                                body = JSON.parse(body);
                            }
                            console.log(body);
                            if(('meta' in body) && ('code' in body['meta']) && (body['meta']['code'] != 200)) {
                                return callback_inner("error");
                            }
                            var mediaIdStr = body['response']['id'];
                            return callback_inner(null, mediaIdStr);
                        }
                    });
我得到以下回应:

谁能告诉我哪里做错了

更新:

                             var queryObj = {'oauth_token': accessToken, v: '20151009', 'pageId': platformProfileId};
                             request({
                                url: url, //URL to hit
                                qs: queryObj, //query obj
                                method: 'POST',
                                headers: { 'Content-Type': 'image/jpeg' },
                                body: b64content
                            }, function(error, response, body){
                                if(error) {
                                    console.log(error);
                                    return cb(error);
                                } else {
                                    if(typeof body != 'object') {
                                        body = JSON.parse(body);
                                    }
                                    console.log(body);
                                    if(('meta' in body) && ('code' in body['meta']) && (body['meta']['code'] != 200)) {
                                        return callback_inner("error");
                                    }
                                    var mediaIdStr = body['response']['id'];
                                    return callback_inner(null, mediaIdStr);
                                }
                            });
尝试将图像作为邮件正文发送,但即使这样也无法工作

更新2:

                var  b64mediaFilesArr = results.C;
                async.map(b64mediaFilesArr, function(b64content, callback_inner){
                    var imagename = new Date() + '.jpg';
                    var url = "https://api.foursquare.com/v2/photos/add";
                    var formObj = {
                        'oauth_token': accessToken, 
                        'v': '20151009', 
                        'pageId': platformProfileId, 
                        'photo': {
                            value: b64content,
                            options: {
                                filename: imagename,
                                contentType: 'image/jpeg'
                            }
                        }
                    };
                    request({
                        url: url, //URL to hit
                        formData: formObj, //form data
                        method: 'POST',
                        headers: { 'Content-Type': 'image/jpeg' }
                        }, function(error, response, body){
                        if(error) {
                            console.log(error);
                            return cb(error);
                        } else {
                            if(typeof body != 'object') {
                                body = JSON.parse(body);
                            }
                            console.log(body);
                            if(('meta' in body) && ('code' in body['meta']) && (body['meta']['code'] != 200)) {
                                return callback_inner("error");
                            }
                            var mediaIdStr = body['response']['id'];
                            return callback_inner(null, mediaIdStr);
                        }
                    }); 
如果我使用上述代码,则响应会发生变化:

这之后我快发疯了。谁能帮帮我吗

解决方案


除了下面公认的答案外,我还解决了base64编码问题。对于在web应用程序中使用base64编码图像数据的用户,需要将图像的原始二进制表示发送到Foursquare。这个答案帮助我做到了这一点

照片
参数不存在<代码>照片是响应字段

图像数据作为HTTP请求的POST消息正文发送

编辑

您是否使用
请求
?指


您不需要编码到base64。

以下是对我有效的请求选项:

var options = {
    'url': 'https://api.foursquare.com/v2/photos/add',
    'qs': {
        'v': '20161001',
        'oauth_token': ACCESS_TOKEN,
        'venueId': VENUE_ID
    },
    'formData': {
        'file': {
            'value': RAW_IMAGE_BUFFER,
            'options': {
                'filename': 'topsecret.jpg',
                'contentType': 'image/jpg'
            }
        }
    },
    'json': true
};
然后打电话:

request.post(options, function(error, response, body){})

那么我应该使用哪个参数来发送图像数据呢?照片没有传入其中一个参数。图像数据作为HTTP请求的POST消息正文发送。有关HTTP请求的更多信息,请参阅。我尝试在正文中发送图像数据,但即使这样也无法工作。请看我的最新资料code@dark_shadow为什么要编码到base64中?我编辑了我的答案。我正在使用gridfs存储图像。当我读取文件时,我将其读取为base64编码字符串。我无法将Base64编码的图像表示发送到foursquare吗?我尝试了您在回答中提供的相同代码,但它不起作用。获取错误“缺少文件上载”。
var options = {
    'url': 'https://api.foursquare.com/v2/photos/add',
    'qs': {
        'v': '20161001',
        'oauth_token': ACCESS_TOKEN,
        'venueId': VENUE_ID
    },
    'formData': {
        'file': {
            'value': RAW_IMAGE_BUFFER,
            'options': {
                'filename': 'topsecret.jpg',
                'contentType': 'image/jpg'
            }
        }
    },
    'json': true
};
request.post(options, function(error, response, body){})