diff -u b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php --- b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php +++ b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php @@ -267,7 +267,22 @@ * @see token_replace() */ public function getUploadLocation($data = array()) { - $settings = $this->getSettings(); + return static::doGetUploadLocation($this->getSettings(), $data); + } + + /** + * Determines the URI for a file field. + * + * @param array $settings + * The array of field settings. + * @param array $data + * An array of token objects to pass to token_replace(). + * + * @return string + * An unsanitized file directory URI with tokens replaced. The result of + * the token replacement is then converted to plain text and returned. + */ + protected static function doGetUploadLocation(array $settings, $data = []) { $destination = trim($settings['file_directory'], '/'); // Replace tokens. As the tokens might contain HTML we convert it to plain @@ -312,8 +327,7 @@ $settings = $field_definition->getSettings(); // Prepare destination. - $dirname = $settings['uri_scheme'] . '://' . $settings['file_directory']; - $dirname = \Drupal::token()->replace($dirname); + $dirname = static::doGetUploadLocation($settings); file_prepare_directory($dirname, FILE_CREATE_DIRECTORY); // Generate a file entity. diff -u b/core/profiles/standard/config/install/field.field.node.article.field_image.yml b/core/profiles/standard/config/install/field.field.node.article.field_image.yml --- b/core/profiles/standard/config/install/field.field.node.article.field_image.yml +++ b/core/profiles/standard/config/install/field.field.node.article.field_image.yml @@ -17,6 +17,7 @@ default_value: { } default_value_callback: '' settings: + file_directory: '[date:custom:Y]-[date:custom:m]' file_extensions: 'png gif jpg jpeg' max_filesize: '' max_resolution: ''