diff --git a/src/app/attachment/controllers/AttachmentController.php b/src/app/attachment/controllers/AttachmentController.php index c04953f2fba262b2edfe56d23e729ff05071f616..a5cadcb11ba43fc797aa350a464d199fdc574f65 100755 --- a/src/app/attachment/controllers/AttachmentController.php +++ b/src/app/attachment/controllers/AttachmentController.php @@ -597,10 +597,8 @@ class AttachmentController $finfo = new \finfo(FILEINFO_MIME_TYPE); $mimeType = $finfo->buffer($fileContent); $pathInfo = pathinfo($pathToDocument); - - $response->write($fileContent); - $response = $response->withAddedHeader('Content-Disposition', "attachment; filename=maarch.{$pathInfo['extension']}"); - + $data = $request->getQueryParams(); + HistoryController::add([ 'tableName' => 'res_attachments', 'recordId' => $args['id'], @@ -619,7 +617,13 @@ class AttachmentController 'eventId' => 'resview' ]); - return $response->withHeader('Content-Type', $mimeType); + if ($data['mode'] == 'base64') { + return $response->withJson(['encodedDocument' => base64_encode($fileContent), 'extension' => $pathInfo['extension'], 'mimeType' => $mimeType]); + } else { + $response->write($fileContent); + $response = $response->withAddedHeader('Content-Disposition', "attachment; filename=maarch.{$pathInfo['extension']}"); + return $response->withHeader('Content-Type', $mimeType); + } } public function getByChrono(Request $request, Response $response) diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php index 83be6deadeff9d98bab7e52f7ac7e50a6a3dcd25..49e15dd85d5de11ccf664127c79c73495315c5ba 100755 --- a/src/app/resource/controllers/ResController.php +++ b/src/app/resource/controllers/ResController.php @@ -607,13 +607,12 @@ class ResController extends ResourceControlController $finfo = new \finfo(FILEINFO_MIME_TYPE); $mimeType = $finfo->buffer($fileContent); + $pathInfo = pathinfo($pathToDocument); $data = $request->getQueryParams(); if ($data['mode'] == 'base64') { - return $response->withJson(['encodedDocument' => base64_encode($fileContent), 'mimeType' => $mimeType]); + return $response->withJson(['encodedDocument' => base64_encode($fileContent), 'extension' => $pathInfo['extension'], 'mimeType' => $mimeType]); } else { - $pathInfo = pathinfo($pathToDocument); - $response->write($fileContent); $response = $response->withAddedHeader('Content-Disposition', "attachment; filename=maarch.{$pathInfo['extension']}"); return $response->withHeader('Content-Type', $mimeType); diff --git a/src/frontend/app/signature-book.component.html b/src/frontend/app/signature-book.component.html index 1763a20ae1e555862b8f39b908bd94ea7fb28fe7..f987025f1d6f9422ec9bae087524bd8cebcfd6bf 100755 --- a/src/frontend/app/signature-book.component.html +++ b/src/frontend/app/signature-book.component.html @@ -81,7 +81,7 @@ <div *ngIf="leftSelectedThumbnail > 0 && signatureBook.documents[leftSelectedThumbnail].format != 'pdf' && !signatureBook.documents[leftSelectedThumbnail].isConverted" [ngStyle]="{'height': showTopLeftPanel ? '79%' : '96%'}" class="visaNoPdfWarning"> <div style="padding-top: 25%;">{{lang.noOverviewAvailable}}<br/><sub>{{lang.pdfVersionFile}} "{{signatureBook.documents[leftSelectedThumbnail].title}}.{{signatureBook.documents[leftSelectedThumbnail].format}}" {{lang.isNotAvailable}}.</sub></div> <div class="visaPjView"> - <a title="{{lang.dlAttachment}}" href="../rest/attachments/{{signatureBook.documents[leftSelectedThumbnail].res_id}}/originalContent" target="_blank"> + <a title="{{lang.dlAttachment}}" (click)="downloadOriginalFile(signatureBook.documents[leftSelectedThumbnail].res_id)" style="cursor: pointer;"> <i class="fa fa-download fa-2x"></i> </a> </div> @@ -180,7 +180,7 @@ <div *ngIf="signatureBook.attachments[rightSelectedThumbnail].format != 'pdf' && signatureBook.attachments[rightSelectedThumbnail].status != 'TMP' && !signatureBook.attachments[rightSelectedThumbnail].isConverted" [ngStyle]="{'height': showTopRightPanel ? '79%' : '96%'}" class="visaNoPdfWarning"> <div style="padding-top: 25%;">{{lang.noOverviewAvailable}}<br/><sub>{{lang.pdfVersionFile}} "{{signatureBook.attachments[rightSelectedThumbnail].title}}.{{signatureBook.attachments[rightSelectedThumbnail].format}}" {{lang.isNotAvailable}}.</sub></div> <div class="visaPjView"> - <a title="{{lang.dlAttachment}}" href="../rest/attachments/{{signatureBook.attachments[rightSelectedThumbnail].res_id}}/originalContent" target="_blank"> + <a title="{{lang.dlAttachment}}" (click)="downloadOriginalFile(signatureBook.attachments[rightSelectedThumbnail].res_id)" style="cursor: pointer;"> <i class="fa fa-download fa-2x"></i> </a> </div> @@ -260,7 +260,7 @@ <span>{{version.relation}}</span> <span>{{lang.object}} : </span> <span>{{version.title}}</span> - <a style="color:#135F7F" title="{{lang.dlAttachment}}" href="../rest/attachments/{{version.resId}}/originalContent" target="_blank"> + <a style="color:#135F7F" title="{{lang.dlAttachment}}" (click)="downloadOriginalFile(version.resId)" style="cursor: pointer;"> <i class="fa fa-download fa-2x"></i> </a> </div> diff --git a/src/frontend/app/signature-book.component.ts b/src/frontend/app/signature-book.component.ts index 83d2989cc340b1189f01c7c0ff9530cfdd294840..e3d059125aac9790f991cb655ccfd17575953cde 100755 --- a/src/frontend/app/signature-book.component.ts +++ b/src/frontend/app/signature-book.component.ts @@ -583,6 +583,22 @@ export class SignatureBookComponent implements OnInit { this.appVisaWorkflow.saveVisaWorkflow(); } + downloadOriginalFile(resId: any) { + const downloadLink = document.createElement('a'); + this.http.get(`../rest/attachments/${resId}/originalContent?mode=base64`).pipe( + tap((data: any) => { + downloadLink.href = `data:${data.mimeType};base64,${data.encodedDocument}`; + downloadLink.setAttribute('download', `${resId}.${data.extension}`); + document.body.appendChild(downloadLink); + downloadLink.click(); + }), + catchError((err: any) => { + this.notify.handleSoftErrors(err); + return of(false); + }) + ).subscribe(); + } + ngOnDestroy() { // unsubscribe to ensure no memory leaks this.subscription.unsubscribe();