public static function getFile($blueprint, $field, $id)
 {
     $tag = "Binary::getFile()";
     Log::debug("{$tag}");
     try {
         $binaryString = Binary::getString($blueprint, $field, $id);
     } catch (Exception $e) {
         throw $e;
     }
     $tmpFile = tmpfile();
     $bytes = fwrite($tmpFile, $binaryString);
     if ($bytes) {
         return $tmpFile;
     } else {
         Log::error("{$tag}: Unable to write to temporary file");
         throw new Exception("{$tag}: Unable to write to temporary file");
     }
 }
             }
         } else {
             // No file was uploaded for this binary field;
             Log::debug("...No file found");
             if ($entityId != 0) {
                 // Existing Entity
                 if (array_key_exists($key, $_POST) && $_POST[$key] == "clear") {
                     // Process request to clear binary
                     Log::debug("...Clear binary");
                     $entity->set($key, NULL);
                     $entity->length($key, 0);
                 } else {
                     // Keep current binaries for existing entities
                     Log::debug("...Keep existing binary");
                     if ($entity->length($key) > 0) {
                         $entity->set($key, Binary::getString($entityBP->getKey(), $key, $entity->getId()));
                         // this is required since this field could have been over written by init($_POST)
                     } else {
                         $entity->set($key, NULL);
                         // this is required since this field could have been over written by init($_POST)
                     }
                 }
             } else {
                 // New Entity
                 $entity->set($key, NULL);
                 $entity->length($key, 0);
             }
         }
     }
     // END: if($field->getDataType() == "binary")
 }
if (empty($blueprint) || empty($field) || empty($id)) {
    Log::error("Missing a required input");
    echo "ERROR: Missing a required input.";
    exit;
} else {
    Log::debug("... " . $blueprint . "." . $field . ": " . $id);
    try {
        // load the blueprint
        $blueprint_file_name = $blueprint . ".entity.xml";
        $bp = BlueprintReader::read($blueprint_file_name);
        // lookup the field
        $f = $bp->get($field);
        // retrieve meta data for file creation
        $mimeType = $f->getMimeType();
        // retrieve the binary as a string
        $binaryString = Binary::getString($blueprint, $field, $id);
    } catch (Exception $e) {
        Log::error($e->getMessage());
        echo "EXCEPTION: " . $e->getMessage();
        exit;
    }
    switch ($action) {
        case "file":
            // create filename
            $ext = Binary::extension($mimeType);
            $filename = $blueprint . "." . $field . "." . $id . "." . $ext;
            // set headers
            header("Content-Type: {$mimeType}");
            header("Content-Disposition: attachment; filename={$filename}");
            header("Content-Transfer-Encoding: binary");
            echo "{$binaryString}";