Как отправить POST-запрос в файл с Content-Type: application / octet-stream в Node js - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь загрузить что-то на сервер Facebook.Их официальная документация гласит:

С помощью токена из диалогового окна вы можете отправить следующий вызов нашему API Graph для отправки вашего .zip.Обратите внимание, что мы используем видеодомен, но это намеренно, поскольку этот URL настроен для получения больших загрузок.

curl -X POST https://graph-video.facebook.com/{App ID}/assets 
  -F 'access_token={ASSET UPLOAD ACCESS TOKEN}' 
  -F 'type=BUNDLE' 
  -F 'asset=@./{YOUR GAME}.zip' 
  -F 'comment=Graph API upload'

Я пытаюсь преобразовать этот запрос curl в node.jsиспользуя модуль request.

            const myzip = zipDir+file.appName+".zip"
            console.log(myzip)
            var url = "https://graph-video.facebook.com/"+file.appId+"/assets";
            const options = {
                url: url,
                headers: {
                  "Content-Type": "application/octet-stream"
                }
              }
            var req = request.post(options, function (err, resp, body) {
                console.log('REQUEST RESULTS:', err, resp.statusCode, body);
                if (err) {
                   console.log('Error!');
                  reject();
                } else {
                   console.log('URL: ' + body);
                  resolve();
                }
              });
              var form = req.form();
              var zipReadStream = fs.createReadStream(myzip,{encoding: "binary"})
              zipReadStream.setEncoding('binary')
              form.append('asset', zipReadStream);
              form.append("access_token", file.token);
              form.append("type", "BUNDLE");
              form.append("comment", mycomment)

Несмотря на то, что я установил заголовки на "Content-Type": "application/octet-stream", я все равно получаю сообщение об ошибке от Facebook, что

OAuth "Facebook Platform" "invalid_request" "(#100) Invalid file. Expected file of one of the following types: application/octet-stream"

Также, когда я пытаюсь войти в системузапросить получение содержимого как 'Content-Type': 'multipart/form-data, а не как application/octet-stream событие, хотя я явно указал это.

1 Ответ

0 голосов
/ 02 февраля 2019

Если вы загружаете данные как часть формы, вы должны использовать multipart/form-data для вашего Content-Type.

Content-Type для определенного файла в форме можно установить для каждого файла, но кажется, что Facebook не хочет, чтобы эти дополнительные данные для этого.

Не устанавливайте Content-Type для вашего HTTP-запроса, и у вас все будет в порядке, так как модуль Request установит его для вас.Также вы можете найти документацию здесь: https://github.com/request/request#multipartform-data-multipart-form-uploads

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...