Como enviar e gerenciar imagens de produtos via Office API.
A Office API aceita imagens codificadas em base64 nos campos base64Images e filenames. As imagens são processadas, otimizadas e armazenadas automaticamente pela plataforma.
| Formato | MIME Type | Prefixo base64 |
|---|---|---|
| JPEG | image/jpeg | data:image/jpeg;base64, |
| PNG | image/png | data:image/png;base64, |
| WebP | image/webp | data:image/webp;base64, |
Envie imagens no momento da criação do produto:
import { readFileSync } from 'fs';
import { basename } from 'path';
function imageToBase64(filepath) {
const buffer = readFileSync(filepath);
const extension = filepath.split('.').pop().toLowerCase();
const mimeTypes = { jpg: 'jpeg', jpeg: 'jpeg', png: 'png', webp: 'webp' };
const mime = mimeTypes[extension] || 'jpeg';
return `data:image/${mime};base64,${buffer.toString('base64')}`;
}
const imagePaths = ['./photos/front.jpg', './photos/back.jpg', './photos/detail.jpg'];
const base64Images = imagePaths.map(imageToBase64);
const filenames = imagePaths.map(p => basename(p));
const { insertProduct } = await officeApi(`
mutation($input: OfficeApiInsertProductInput!) {
insertProduct(input: $input) {
success
productId
product {
id
title
images { url }
}
}
}
`, {
input: {
title: 'Camiseta com Estampa',
description: 'Camiseta com estampa exclusiva',
price: 59.90,
availableQuantity: 50,
isActive: true,
category: 'product',
menu: [],
base64Images,
filenames
}
});
console.log('Imagens:', insertProduct.product.images); Ao atualizar um produto, envie todas as imagens desejadas (as imagens anteriores serão substituídas):
const { updateProduct } = await officeApi(`
mutation($input: OfficeApiUpdateProductInput!) {
updateProduct(input: $input) {
success
product {
id
images { url }
}
}
}
`, {
input: {
id: 'UHJvZHVjdDo2MTIz...',
base64Images: [imageToBase64('./nova-foto.jpg')],
filenames: ['nova-foto.jpg']
}
}); base64Images em updateProduct, as imagens anteriores do produto são substituídas pelas novas. Envie todas as imagens que deseja manter.
Se suas imagens já estão hospedadas em um servidor, você pode converter URLs para base64 antes de enviar:
async function urlToBase64(imageUrl) {
const response = await fetch(imageUrl);
const buffer = Buffer.from(await response.arrayBuffer());
const contentType = response.headers.get('content-type') || 'image/jpeg';
return `data:${contentType};base64,${buffer.toString('base64')}`;
}
const imageUrl = 'https://example.com/photo.jpg';
const base64 = await urlToBase64(imageUrl);
// Use no insertProduct ou updateProduct
const input = {
title: 'Produto Importado',
base64Images: [base64],
filenames: ['photo.jpg'],
// ... demais campos
};