try {
$file = $this->cache->get($addressbook->getResourceId(), $node->getName(), $size, $node);
$response->setHeader('Content-Type', $file->getMimeType());
- $response->setHeader('Content-Disposition', 'attachment');
+ $fileName = $node->getName() . '.' . PhotoCache::ALLOWED_CONTENT_TYPES[$file->getMimeType()];
+ $response->setHeader('Content-Disposition', "attachment; filename=$fileName");
$response->setStatus(200);
$response->setBody($file->getContent());
class PhotoCache {
/** @var array */
- protected const ALLOWED_CONTENT_TYPES = [
+ public const ALLOWED_CONTENT_TYPES = [
'image/png' => 'png',
'image/jpeg' => 'jpg',
'image/gif' => 'gif',
if ($photo) {
$file = $this->createMock(ISimpleFile::class);
$file->method('getMimeType')
- ->willReturn('imgtype');
+ ->willReturn('image/jpeg');
$file->method('getContent')
->willReturn('imgdata');
$this->response->expects($this->at(3))
->method('setHeader')
- ->with('Content-Type', 'imgtype');
+ ->with('Content-Type', 'image/jpeg');
$this->response->expects($this->at(4))
->method('setHeader')
- ->with('Content-Disposition', 'attachment');
+ ->with('Content-Disposition', 'attachment; filename=card.jpg');
$this->response->expects($this->once())
->method('setStatus')
Given "admin" uploads the contact "bjoern.vcf" to the addressbook "MyAddressbook"
When Exporting the picture of contact "bjoern.vcf" from addressbook "MyAddressbook" as user "admin"
Then The following HTTP headers should be set
- |Content-Disposition|attachment|
+ |Content-Disposition|attachment; filename=bjoern.vcf.jpg|
|Content-Type|image/jpeg|
|Content-Security-Policy|default-src 'none';|
|X-Content-Type-Options |nosniff|