Subir imagens multiplas via API usando base64

A vtex disponibiliza de alguma api que de pra subir imagens no formato base64? quero criar uma aplicação para subir imagens variadas ao cadastrar um sku porem esbarrei no envio de imagens, a api de sku file pede url como parâmetro porem as imagens fica no computador nesse caso não possui url ainda, assim deveria subira primeiro para vtex.

Bem-vindo à VTEX Community, @wandersoncorrea!

Na API do Catálogo, temos duas opções no endpoint Create SKU File. Ao selecionar o dropdown da imagem abaixo, você terá acesso à descrição do request body que pode ser usado para upload the imagens.

Screen Shot 2021-12-10 at 09.41.51

Sim escolhi essa opção, porem ao enviar, aparece uma mensagem de erro pedindo o parametro url, sendo q não ha esse campo, e ainda como estou enviando a imagem esse parâmetro de url não existi ainda.

mensagem de erro

{

"Message":

"Field Url is required"

}

Vou olhar aqui com calma, mas imagino que o problema seja o header Content-Type ou algo do tipo. Você pode compartilhar o cURL da chamada que está fazendo, omitindo suas credenciais (appKey/appToken) na mensagem?

Essa chamada funcionou pra mim no Postman.

curl --location --request POST 'https://{accountName}.vtexcommercestable.com.br/api/catalog/pvt/stockkeepingunit/1/file' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-VTEX-API-AppKey: {X-VTEX-API-AppKey}' \
--header 'X-VTEX-API-AppToken: {X-VTEX-API-AppToken}' \
--header 'Cookie: {Cookie}' \
--form 'file=@"/Users/georgebrindeiro/Downloads/notebook.png"' \
--form 'IsMain="true"' \
--form 'Label="Label-do-SKU"' \
--form 'Name="Nome-do-SKU"' \
--form 'Text="Text-do-SKU"'

Ou seja, a questão é que esperamos um request body do tipo form-data, apontando para onde o arquivo se encontra. Não sei se dá pra fazer com base64.

Esse é o código que eu estou rodando:

const fetch = require('node-fetch');

const url = 'https://lojalivreeleve.vtexcommercestable.com.br/api/catalog/pvt/stockkeepingunit/1071216693/file';
const options = {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Accept: 'application/json',
    'X-VTEX-API-AppKey': 'key',
    'X-VTEX-API-AppToken': 'tokem'
  },
  body: JSON.stringify({
    'Image file': 'data:image/jpeg;name=papeldeparede-planetas-wallhaven-537244.jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4QBsRXhpZgAASUkqAAgAAAADADEBAgAHAAAAMgAAABICAwACAAAAAgACAGmHBAABAAAAOgAAAAAAAABHb29nbGUAAAMAAJAHAAQAAAAwMjIwAqAEAAEAAAAACAAAA6AEAAEAAACABAAAAAAAAP/bAIQAAwICCAgICAgICAgICAgI'
  })
};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error('error:' + err));

response:

{

"Message":

"Field Url is required"

}

o base64 ta imcompleto so pra vc ver oq acontece.

Entendi! Você consegue montar esse mesmo request usando form-data, do jeito que eu mostrei?