diff --git a/filefield_field.inc b/filefield_field.inc
index 2f8e607..0b99072 100644
--- a/filefield_field.inc
+++ b/filefield_field.inc
@@ -63,10 +63,13 @@ function filefield_field_settings_views_data($field) {
   $db_info = content_database_info($field);
   $table_alias = content_views_tablename($field);
 
-  // By defining the relationship, we already have a "Has file" filter
-  // plus all the filters that Views already provides for files.
-  // No need for having a filter by ourselves.
-  unset($data[$table_alias][$field['field_name'] .'_fid']['filter']);
+  // Although we effectively get a "Has file" filter by defining the
+  // relationship to the {files} table, this doesn't work as an exposed filter.
+  // Use the boolean handler to get a true/false filter.
+  $data[$table_alias][$field['field_name'] .'_fid']['filter']['handler'] = 'views_handler_filter_boolean_operator';
+  // Allow NULL values to mean 'false', which is essential to filter by whether
+  // a file is present.
+  $data[$table_alias][$field['field_name'] .'_fid']['filter']['accept null'] = TRUE;
 
   // Add a relationship for related file.
   $data[$table_alias][$field['field_name'] .'_fid']['relationship'] = array(
