2017-01-02 4 views
0

Я разрабатываю инструмент, преобразующий шрифт ttf в другие форматы, используя API онлайнfontconverter.com. Поэтому у меня возникла проблема с получением архива propper tar.gz. Я получаю файл, но ОС сообщила мне, что архив поврежден. Итак, как я могу сохранить файл из тела ответа? Вот код, который я использовал:Как получить архив .tar.gz из unirest-ответа?

'use strict'; 
const unirest = require('unirest'); 
const fs = require('fs'); 
const file = fs.createWriteStream('./onlinefontconverter.com.tar.gz'); 

unirest.post("https://ofc.p.mashape.com/directConvert/") 
    .header("X-Mashape-Key", "key") 
    .attach("file", fs.createReadStream('./Roboto-Thin.ttf')) 
    .field("format", "svg") 
    .end((result) => { 
    file.write(result.body, {encoding:'binary'}); 
    }); 

Вот заголовки:

{ 'accept-ranges': 'bytes', 
 
    'access-control-allow-headers': 'X-Mashape-Key', 
 
    'access-control-allow-methods': 'POST, OPTIONS', 
 
    'access-control-allow-origin': '*', 
 
    'access-control-expose-headers': 'Content-Disposition', 
 
    'cache-control': 'public, max-age=0', 
 
    'content-disposition': 'attachment; filename="onlinefontconverter.com.tar.gz"', 
 
    'content-type': 'application/octet-stream', 
 
    date: 'Mon, 02 Jan 2017 18:52:34 GMT', 
 
    expires: '0', 
 
    'last-modified': 'Mon, 02 Jan 2017 18:52:34 GMT', 
 
    pragma: 'no-cache', 
 
    server: 'Mashape/5.0.6', 
 
    via: '1.1 vegur', 
 
    'content-length': '119251', 
 
    connection: 'Close' }

UPD: У меня есть проблема с unirest, поэтому я переписан на простой запрос.

const file = fs.createWriteStream('./fonts.tar.gz'); 
 
const request = require('request'); 
 
var r = request.post({ 
 
    url:  'https://ofc.p.mashape.com/directConvert/', 
 
    headers: {'X-Mashape-Key' : 'key'}, 
 
}, function(error, response, body){ 
 
    // console.log(body); 
 
    // console.log(response.statusCode); 
 
    // console.log(response.headers); 
 

 
}); 
 
r.pipe(file); 
 
var form = r.form(); 
 
form.append('format', 'ttf'); 
 
form.append('my_file', fs.createReadStream('Aller_Rg.ttf'));

ответ

0

Я думаю, что это проблема неправильного кодирования ответа в unirest библиотеке. Попробуйте что-нибудь подобное (и спрячьте свой секретный ключ):

'use strict'; 
const fs = require('fs'); 

const request = require('request'); 

const formData = { 
    format: 'svg', 
    file: fs.createReadStream('./Roboto-Thin.ttf') 
} 

var buff = []; 
request.post({ url: "https://ofc.p.mashape.com/directConvert/", 
      formData: formData, 
      headers: { 
       "X-Mashape-Key": "SecretMashapeKey" 
      } 
      }) 
     .on('data', function(chunk) { 
      buff.push(chunk); 
     }) 
     .on('end', function() { 
      var data = Buffer.concat(buff); 
      fs.writeFileSync('onlinefontconverter.com.tar.gz', 
           data, 
           'binary'); 
     }); 
+0

Спасибо! Я подумал о себе. Мой код находится в первом сообщении. –