mirror of
https://github.com/grocy/grocy.git
synced 2025-10-09 15:46:08 +00:00
Support data:
URI images for external barcode lookup plugins (#2814)
* add support for data: URI images for external barcode lookup plugins * Adapt existing code style --------- Co-authored-by: Bernd Bestel <bernd@berrnd.de>
This commit is contained in:
@@ -628,20 +628,35 @@ class StockService extends BaseService
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$webClient = new Client();
|
if (preg_match('/^https?:\/\//', $pluginOutput['__image_url']))
|
||||||
$response = $webClient->request('GET', $pluginOutput['__image_url'], ['headers' => ['User-Agent' => 'Grocy/' . $this->getApplicationService()->GetInstalledVersion()->Version . ' (https://grocy.info)']]);
|
|
||||||
$fileName = $pluginOutput['__barcode'];
|
|
||||||
$fileExtension = pathinfo(parse_url($pluginOutput['__image_url'], PHP_URL_PATH), PATHINFO_EXTENSION);
|
|
||||||
|
|
||||||
// Fallback to Content-Type header if file extension is missing
|
|
||||||
if (strlen($fileExtension) == 0 && $response->hasHeader('Content-Type'))
|
|
||||||
{
|
{
|
||||||
$fileExtension = explode('+', explode('/', $response->getHeader('Content-Type')[0])[1])[0];
|
$webClient = new Client();
|
||||||
|
$response = $webClient->request('GET', $pluginOutput['__image_url'], ['headers' => ['User-Agent' => 'Grocy/' . $this->getApplicationService()->GetInstalledVersion()->Version . ' (https://grocy.info)']]);
|
||||||
|
$fileExtension = pathinfo(parse_url($pluginOutput['__image_url'], PHP_URL_PATH), PATHINFO_EXTENSION);
|
||||||
|
|
||||||
|
// Fallback to Content-Type header if file extension is missing
|
||||||
|
if (strlen($fileExtension) == 0 && $response->hasHeader('Content-Type'))
|
||||||
|
{
|
||||||
|
$fileExtension = explode('+', explode('/', $response->getHeader('Content-Type')[0])[1])[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
$imageData = $response->getBody();
|
||||||
|
}
|
||||||
|
elseif (preg_match('/data:image\/(\w+?);base64,([A-Za-z0-9+\/]*={0,2})$/', $pluginOutput['__image_url'], $matches))
|
||||||
|
{
|
||||||
|
$fileExtension = $matches[1];
|
||||||
|
if (!($imageData = base64_decode($matches[2])))
|
||||||
|
{
|
||||||
|
unset($imageData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$filePath = $fileName . '.' . $fileExtension;
|
if (!empty($fileExtension) && !empty($imageData))
|
||||||
file_put_contents($this->getFilesService()->GetFilePath('productpictures', $filePath), $response->getBody());
|
{
|
||||||
$productData['picture_file_name'] = $filePath;
|
$fileName = $pluginOutput['__barcode'] . '.' . $fileExtension;
|
||||||
|
file_put_contents($this->getFilesService()->GetFilePath('productpictures', $fileName), $imageData);
|
||||||
|
$productData['picture_file_name'] = $fileName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (\Exception)
|
catch (\Exception)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user