Updated base64 image extraction to use url instead of path

To ensure it works with all storage types and follows the format of
manually uploaded image content
This commit is contained in:
Dan Brown 2021-06-04 22:59:31 +01:00
parent af7d62799c
commit 0627efe5e9
No known key found for this signature in database
GPG key ID: 46D9F943C24A2EF9
3 changed files with 15 additions and 5 deletions

View file

@ -99,7 +99,7 @@ class PageContent
$imageName = 'embedded-image-' . Str::random(8) . '.' . $extension;
try {
$image = $imageRepo->saveNewFromData($imageName, base64_decode($base64ImageData), 'gallery', $page->id);
$imageNode->setAttribute('src', $image->path);
$imageNode->setAttribute('src', $image->url);
} catch (ImageUploadException $exception) {
$imageNode->setAttribute('src', '');
}

View file

@ -4,6 +4,16 @@ use BookStack\Entities\Models\Page;
use BookStack\Model;
use BookStack\Traits\HasCreatorAndUpdater;
/**
* @property int $id
* @property string $name
* @property string $url
* @property string $path
* @property string $type
* @property int $uploaded_to
* @property int $created_by
* @property int $updated_by
*/
class Image extends Model
{
use HasCreatorAndUpdater;

View file

@ -495,10 +495,10 @@ class PageContentTest extends TestCase
]);
$page->refresh();
$this->assertStringMatchesFormat('%A<p%A>test<img src="/uploads/images/gallery/%A.jpeg">%A</p>%A', $page->html);
$this->assertStringMatchesFormat('%A<p%A>test<img src="http://localhost/uploads/images/gallery/%A.jpeg">%A</p>%A', $page->html);
$matches = [];
preg_match('/src="(.*?)"/', $page->html, $matches);
preg_match('/src="http:\/\/localhost(.*?)"/', $page->html, $matches);
$imagePath = $matches[1];
$imageFile = public_path($imagePath);
$this->assertEquals(base64_decode($this->base64Jpeg), file_get_contents($imageFile));
@ -519,10 +519,10 @@ class PageContentTest extends TestCase
]);
$page->refresh();
$this->assertStringMatchesFormat('%A<p%A>test<img src="/uploads/images/gallery/%A.png">%A</p>%A', $page->html);
$this->assertStringMatchesFormat('%A<p%A>test<img src="http://localhost/uploads/images/gallery/%A.png">%A</p>%A', $page->html);
$matches = [];
preg_match('/src="(.*?)"/', $page->html, $matches);
preg_match('/src="http:\/\/localhost(.*?)"/', $page->html, $matches);
$imagePath = $matches[1];
$imageFile = public_path($imagePath);
$this->assertEquals(base64_decode($base64PngWithoutWhitespace), file_get_contents($imageFile));