Загрузите изображение продукта с помощью веб-сервиса PrestaShop с узлом

Загрузите изображение продукта с помощью веб-сервиса PrestaShop с узлом

30.05.2019 11:22:32 Просмотров 42 Источник

Я пытаюсь загрузить изображение продукта с помощью веб-сервиса PrestaShop.

Он всегда возвращает ту же ошибку:

  <?xml version="1.0" encoding="UTF-8"?>
  <prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
    <errors>
      <error>
        <code><![CDATA[66]]></code>
        <message><![CDATA[Unable to save this image]]></message>
      </error>
    </errors>
  </prestashop>

Мой текущий код выглядит так:

const url = this.options.url 
    + '/api/images/products/' 
    + piezaSchema.querySelector('product>id').childNodes[0].nodeValue
    + '?ws_key='
    + this.options.api;

const file = require('fs').readFileSync(require('path')
        .resolve(this.options.ruta 
            + '/images/'
            + image.getAttribute('fichero')));

const resp = await fetch(url, {
    method: 'POST',
    body: 'image=' + file,
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
});

Я пробовал с различными вариантами кодировки, отправляя как 'Content-Type': 'image/jpeg'и т. д.

Спасибо всем за ваше время.

У вопроса есть решение - Посмотреть?

Ответы - Загрузите изображение продукта с помощью веб-сервиса PrestaShop с узлом / Upload a product image using PrestaShop Web-service with Node

Bruno Leveque

30.05.2019 09:53:51

Эта ошибка вызвана writePostedImageOnDisk()в /classes/webservice/WebserviceSpecificManagementImages.php.

Обычно это может быть связано с:

  • Отсутствие прав доступа к папке PHP /tmpи / или _PS_TMP_IMG_DIR_
  • $_FILES['image']['tmp_name'] being empty
  • Некоторые проблемы с customized_data

    Надеюсь, это поможет!

Francisco Garrido

31.05.2019 10:30:55

Я смог исправить, отправив изображение, как если бы оно было загружено формой:

async uploadImage(fichero, url) {

    const form = new FormData();

    const filePath = require('path').resolve(this.options.ruta + '/images/' + fichero);

    const file = new File([await fetch(filePath).then(r => r.blob())], fichero, {type: 'image/jpeg'});

    form.append('image', file);

    const options = {
        method: 'POST',
        body: form
    };

    fetch(url, options);

}
Закрыть X