Download a file as an attachment to a response

This example demonstrates how to return a file as an attachment using the WSAttachment attribute

Example 1: downloading file using WSAttachment

IMPORT com
IMPORT os

PUBLIC DEFINE myerror RECORD ATTRIBUTE(WSError="My error")
  code INTEGER,
  reason STRING
END RECORD

PUBLIC FUNCTION downloadImageFile()
  ATTRIBUTES (WSGet, 
              WSPath="/files3/images",
              WSDescription="download image file to the client with WSAttachment",
              WSThrows="400:myerror")
  RETURNS (STRING ATTRIBUTE(WSAttachment, WSMedia="image/*") )
    DEFINE ret, fname STRING
    DEFINE ok INTEGER

    LET fname="favicon.ico"
    LET ok = os.Path.exists(fname)
    IF ok THEN
        LET ret = fname
    ELSE
      LET myerror.reason = SFMT("File (%1) does not exist", fname)
      CALL com.WebServiceEngine.SetRestError(400,myerror)
    END IF
  RETURN ret
END FUNCTION
In order to return a file as an attachment to a client, set the WSAttachment attribute on an output parameter. In the sample function, a STRING type is defined with a WSAttachment attribute. A WSMedia attribute is added to handle the data format for images.
The Content-Disposition response header in the output indicates that the content is expected as an attachment. Therefore, when the function is called, the file is downloaded and saved to the client locally in its TMP directory.
Figure: Output of HTTP response with image file