Deprecated: Optional parameter $delta declared before required parameter $element is implicitly treated as a required parameter in /var/www/html/sites/all/modules/contrib/radioactivity/radioactivity.field.inc on line 432

Deprecated: Optional parameter $path declared before required parameter $langcode is implicitly treated as a required parameter in /var/www/html/sites/all/modules/contrib/ckeditor_link/ckeditor_link.module on line 328

Deprecated: Optional parameter $item declared before required parameter $complete_form is implicitly treated as a required parameter in /var/www/html/sites/all/modules/contrib/menu_attributes/menu_attributes.module on line 168
Download File With Rest | InterSystems Developer Community | API|Caché
Question
· Oct 29, 2018

Download File With Rest

Hello Everyone!

Following the example below i can download file only txt format, in other format(pdf,xls,rar) i have errors(can't open file), 

So, how i will change code for download file in other format? 

Thanks! 

ClassMethod GetFile(file) As %String
{
#dim %request As %CSP.Request

    set filename="E:\Rest\"_file   
    set %response.ContentType=..GetFileContentType($p(filename,".",*))
    do %response.SetHeader("Content-Disposition","attachment;filename="""_$p(filename,"\",*)_"""")
    Set %response.NoCharSetConvert=1
    Set %response.Expires=50
    set file=##class(%File).%New(filename)
    do file.Open("R")
    do file.OutputToDevice()
    Quit $$$OK
}

ClassMethod GetFileContentType(pFileType) As %String
{
    if pFileType="txt" quit "text/plain"
    if pFileType="rar" quit "application/x-rar-compressed" 

   if pFileType="pdf" quit "application/pdf"
    if pFileType="docx" quit "application/msword"
    if pFileType="xls" quit "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    quit ""
}

Discussion (3)0
Log in or sign up to continue

Hi Sabit,

This code looks familiar, a 5 minute hack from another answer I made blush

The problem is probably with %File, try replacing the file output with the following code...


set file=##class(%FileBinaryStream).%New()
set file.Filename=filename
quit file.OutputToDevice()

If you are still getting a file not found then the file name is probably wrong / corrupt, try logging the file name and opening the file from the command line to be sure.

Sean.