何时使用 Symfony 的 UploadedFile guessClientExtension() 与 guessExtension()?
When to use Symfony's UploadedFile guessClientExtension() vs guessExtension()?
从 ReactJS/Javascript 前端应用程序上传文件到 Symfony 4 后端,我尝试获取它的文件扩展名。
收到文件后,我实例化了一个 UploadedFile
对象,它具有以下可用方法:
$uploadedFile->getClientOriginalExtension();
$uploadedFile->getClientMimeType();
$uploadedFile->guessClientExtension();
$uploadedFile->guessExtension();
我希望这些 getter 能够 return 一致的结果,但事实并非如此。
Return 名为 image-ile.jpg
的上传文件的结果是:
getClientOriginalExtension() -> ''
getClientMimeType() -> 'application/octet-stream'
guessClientExtension() -> 'bin'
guessExtension() -> 'jpeg'
`
Image file is sent using javascript FormData, with `Content-Type: multipart/form-data`:
> ------WebKitFormBoundaryvFjJSluadmvCob6T
Content-Disposition: form-data; name="image-ile.jpg"; filename="image-ile.jpg"
Content-Type: image/jpeg
In my case, the `guessClientExtension()` doesn't return the relevant file extension while the `guessExtension()` does. So in which cases should I use one getter instead of the other one?
大多数情况下,您应该使用 guessExtension()
而不是 guessClientExtenstion()
。
后者使用客户端提供的 mime 类型来确定文件的扩展名。但我可以向您发送一个设置 mime 类型 image/jpg
的 Word 文件,您将设置不正确的扩展名。
与大多数事情一样,信任客户从来都不是一个很好的做法,除非您有非常具体的理由这样做。
何时使用此值完全取决于应用程序,但在某些情况下,您可能有兴趣了解客户端实际发送的元数据。没有明确的“何时使用”列表,只是有时需要。想到日志记录和调试。
但简而言之:除非您有 guessClientExtension()
的特定用例,否则您可能对 guessExtension()
.
感兴趣
如果您检查每个功能的 the source code(您可以自己完成 IDE),您将看到 guessClientExtension()
的评论:
/**
* Returns the extension based on the client mime type.
*
* If the mime type is unknown, returns null.
*
* This method uses the mime type as guessed by getClientMimeType()
* to guess the file extension. As such, the extension returned
* by this method cannot be trusted.
*
* For a trusted extension, use guessExtension() instead (which guesses
* the extension based on the guessed mime type for the file).
guessExtension()
实际上定义了 on File
,并通过猜测实际上传文件的 MIME 类型来确定文件扩展名,而不是从客户端提供的任何元数据。
从 ReactJS/Javascript 前端应用程序上传文件到 Symfony 4 后端,我尝试获取它的文件扩展名。
收到文件后,我实例化了一个 UploadedFile
对象,它具有以下可用方法:
$uploadedFile->getClientOriginalExtension();
$uploadedFile->getClientMimeType();
$uploadedFile->guessClientExtension();
$uploadedFile->guessExtension();
我希望这些 getter 能够 return 一致的结果,但事实并非如此。
Return 名为 image-ile.jpg
的上传文件的结果是:
getClientOriginalExtension() -> ''
getClientMimeType() -> 'application/octet-stream'
guessClientExtension() -> 'bin'
guessExtension() -> 'jpeg'
`
Image file is sent using javascript FormData, with `Content-Type: multipart/form-data`:
> ------WebKitFormBoundaryvFjJSluadmvCob6T
Content-Disposition: form-data; name="image-ile.jpg"; filename="image-ile.jpg"
Content-Type: image/jpeg
In my case, the `guessClientExtension()` doesn't return the relevant file extension while the `guessExtension()` does. So in which cases should I use one getter instead of the other one?
大多数情况下,您应该使用 guessExtension()
而不是 guessClientExtenstion()
。
后者使用客户端提供的 mime 类型来确定文件的扩展名。但我可以向您发送一个设置 mime 类型 image/jpg
的 Word 文件,您将设置不正确的扩展名。
与大多数事情一样,信任客户从来都不是一个很好的做法,除非您有非常具体的理由这样做。
何时使用此值完全取决于应用程序,但在某些情况下,您可能有兴趣了解客户端实际发送的元数据。没有明确的“何时使用”列表,只是有时需要。想到日志记录和调试。
但简而言之:除非您有 guessClientExtension()
的特定用例,否则您可能对 guessExtension()
.
如果您检查每个功能的 the source code(您可以自己完成 IDE),您将看到 guessClientExtension()
的评论:
/**
* Returns the extension based on the client mime type.
*
* If the mime type is unknown, returns null.
*
* This method uses the mime type as guessed by getClientMimeType()
* to guess the file extension. As such, the extension returned
* by this method cannot be trusted.
*
* For a trusted extension, use guessExtension() instead (which guesses
* the extension based on the guessed mime type for the file).
guessExtension()
实际上定义了 on File
,并通过猜测实际上传文件的 MIME 类型来确定文件扩展名,而不是从客户端提供的任何元数据。