function ContentDispositionFilenameParser::parseFilename
Same name in other branches
- 11.x core/modules/file/src/Upload/ContentDispositionFilenameParser.php \Drupal\file\Upload\ContentDispositionFilenameParser::parseFilename()
Parse the content disposition header and return the filename.
Parameters
\Symfony\Component\HttpFoundation\Request $request: The request.
Return value
string The filename.
Throws
\Symfony\Component\HttpKernel\Exception\BadRequestHttpException Thrown when the 'Content-Disposition' request header is invalid.
8 calls to ContentDispositionFilenameParser::parseFilename()
- ContentDispositionFilenameParserTest::testParseFilenameExtended in core/
modules/ file/ tests/ src/ Unit/ Upload/ ContentDispositionFilenameParserTest.php - @covers ::parseFilename
- ContentDispositionFilenameParserTest::testParseFilenameInvalid in core/
modules/ file/ tests/ src/ Unit/ Upload/ ContentDispositionFilenameParserTest.php - @covers ::parseFilename @dataProvider invalidHeaderProvider
- ContentDispositionFilenameParserTest::testParseFilenameMissing in core/
modules/ file/ tests/ src/ Unit/ Upload/ ContentDispositionFilenameParserTest.php - @covers ::parseFilename
- ContentDispositionFilenameParserTest::testParseFilenameSuccess in core/
modules/ file/ tests/ src/ Unit/ Upload/ ContentDispositionFilenameParserTest.php - Tests the parseFilename() method.
- FileUpload::handleFileUploadForResource in core/
modules/ jsonapi/ src/ Controller/ FileUpload.php - Handles JSON:API file upload requests.
File
-
core/
modules/ file/ src/ Upload/ ContentDispositionFilenameParser.php, line 35
Class
- ContentDispositionFilenameParser
- Parses the content-disposition header to extract the client filename.
Namespace
Drupal\file\UploadCode
public static function parseFilename(Request $request) : string {
// Firstly, check the header exists.
if (!$request->headers
->has('content-disposition')) {
throw new BadRequestHttpException('"Content-Disposition" header is required. A file name in the format "filename=FILENAME" must be provided.');
}
$content_disposition = $request->headers
->get('content-disposition');
// Parse the header value. This regex does not allow an empty filename.
// i.e. 'filename=""'. This also matches on a word boundary so other keys
// like 'not_a_filename' don't work.
if (!preg_match(static::REQUEST_HEADER_FILENAME_REGEX, $content_disposition, $matches)) {
throw new BadRequestHttpException('No filename found in "Content-Disposition" header. A file name in the format "filename=FILENAME" must be provided.');
}
// Check for the "filename*" format. This is currently unsupported.
if (!empty($matches['star'])) {
throw new BadRequestHttpException('The extended "filename*" format is currently not supported in the "Content-Disposition" header.');
}
// Don't validate the actual filename here, that will be done by the upload
// validators in validate().
// @see \Drupal\file\Plugin\rest\resource\FileUploadResource::validate()
$filename = $matches['filename'];
// Make sure only the filename component is returned. Path information is
// stripped as per https://tools.ietf.org/html/rfc6266#section-4.3.
// We do not need to use Drupal's FileSystem service here as we are not
// dealing with StreamWrappers.
return \basename($filename);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.