7.x file.module theme_file_link($variables)

Returns HTML for a link to a file.


$variables: An associative array containing:

  • file: A file object to which the link will be created.
  • icon_directory: (optional) A path to a directory of icons to be used for files. Defaults to the value of the "file_icon_directory" variable.

Related topics

3 theme calls to theme_file_link()
FileFieldDisplayTestCase::testNodeDisplay in modules/file/tests/file.test
Tests normal formatter display on node display.
file_managed_file_process in modules/file/file.module
Process function to expand the managed_file element type.
theme_file_formatter_table in modules/file/file.field.inc
Returns HTML for a file attachments table.


modules/file/file.module, line 776
Defines a "managed_file" Form API field and a "file" field for Field module.


function theme_file_link($variables) {
  $file = $variables['file'];
  $icon_directory = $variables['icon_directory'];
  $url = file_create_url($file->uri);

  // Human-readable names, for use as text-alternatives to icons.
  $mime_name = array(
    'application/msword' => t('Microsoft Office document icon'),
    'application/vnd.ms-excel' => t('Office spreadsheet icon'),
    'application/vnd.ms-powerpoint' => t('Office presentation icon'),
    'application/pdf' => t('PDF icon'),
    'video/quicktime' => t('Movie icon'),
    'audio/mpeg' => t('Audio icon'),
    'audio/wav' => t('Audio icon'),
    'image/jpeg' => t('Image icon'),
    'image/png' => t('Image icon'),
    'image/gif' => t('Image icon'),
    'application/zip' => t('Package icon'),
    'text/html' => t('HTML icon'),
    'text/plain' => t('Plain text icon'),
    'application/octet-stream' => t('Binary Data'),
  $mimetype = file_get_mimetype($file->uri);
  $icon = theme('file_icon', array(
    'file' => $file,
    'icon_directory' => $icon_directory,
    'alt' => !empty($mime_name[$mimetype]) ? $mime_name[$mimetype] : t('File'),

  // Set options as per anchor format described at
  // http://microformats.org/wiki/file-format-examples
  $options = array(
    'attributes' => array(
      'type' => $file->filemime . '; length=' . $file->filesize,

  // Use the description as the link text if available.
  if (empty($file->description)) {
    $link_text = $file->filename;
  else {
    $link_text = $file->description;
    $options['attributes']['title'] = check_plain($file->filename);
  return '<span class="file">' . $icon . ' ' . l($link_text, $url, $options) . '</span>';


gbaudoin’s picture

icon_directory is not "optional" as it will trigger a notice if absent ?

sodu.parsiev’s picture

correct way :
theme('file_link', array('file' => $file));

thirdender’s picture

entity_metadata_wrapper returns the file object as an array, which causes errors when rendering with this function. When I passed the value of the file field to the theme function, I had to first cast the array as an object (using (object)). The following code worked for me:

  $order = commerce_order_load(8);
  $order_wrapper = entity_metadata_wrapper('commerce_order', $order);
  $file = $order_wrapper->field_shipping_label->value();
  if (!empty($file)) {
    $file_link = theme('file_link', array(
      'file' => (object) $file,
    drupal_set_message(t('A shipping label for this order has already been generated.') . '<br>' . $file_link);