Laravel 使用 Illuminate\Http\Request 的 file() 方法來獲取使用者上傳的檔案 ,返回 Symfony\Component\HttpFoundation\File\UploadedFile 例項
$request->file('photo');
// 或者
$request->photo;
驗證上傳檔案要分兩步 ,首先驗證使用者是否有上傳檔案 ,如果有再驗證檔案是否上傳成功
if ($request->hasFile('file') && $request->file('file')->isValid()) {
// isValid() 在檔案自身上呼叫 ,如果沒有上傳檔案就呼叫會產生報錯 , 因此先使用 hasFile() 檢測是否有上傳檔案
}
// 繼承關係
Symfony\Component\HttpFoundation\File\UploadedFile extends Symfony\Component\HttpFoundation\File\File;
下列方法名中帶有 Client 的 ,表示相關資訊是從請求中提取 ,因此未必可信
成員 | 說明 | 示例 |
---|---|---|
getClientOriginalName() | 返回上傳檔案的原始名稱 | - |
getClientOriginalExtension() | 返回上傳檔案的字尾名 | - |
getClientMimeType() | 返回上傳檔案的 MIME 型別 | - |
guessClientExtension() | 返回上傳檔案的字尾名 | - |
getClientSize() | 返回上傳檔案的位元組大小 | - |
getError() | 返回上傳檔案的錯誤資訊 ,成功返回 UPLOAD_ERR_OK 常量 ,失敗返回 UPLOAD_ERR_XXX 系列的其他常量 | - |
isValid() | 驗證檔案是否成功上傳 | - |
move($directory, $name = null) | 將上傳移動到 $directory + $name( 如果有 ) | - |
getMaxFilesize() | 返回 php.ini 中 upload_max_filesize 配置的值 | - |
getErrorMessage() | 返回上傳檔案產生的錯誤資訊 | - |
錯誤常量和錯誤資訊
/**
* Returns an informative upload error message.
*
* @return string The error message regarding the specified error code
*/
public function getErrorMessage()
{
static $errors = array(
UPLOAD_ERR_INI_SIZE => 'The file "%s" exceeds your upload_max_filesize ini directive (limit is %d KiB).',
UPLOAD_ERR_FORM_SIZE => 'The file "%s" exceeds the upload limit defined in your form.',
UPLOAD_ERR_PARTIAL => 'The file "%s" was only partially uploaded.',
UPLOAD_ERR_NO_FILE => 'No file was uploaded.',
UPLOAD_ERR_CANT_WRITE => 'The file "%s" could not be written on disk.',
UPLOAD_ERR_NO_TMP_DIR => 'File could not be uploaded: missing temporary directory.',
UPLOAD_ERR_EXTENSION => 'File upload was stopped by a PHP extension.',
);
$errorCode = $this->error;
$maxFilesize = $errorCode === UPLOAD_ERR_INI_SIZE ? self::getMaxFilesize() / 1024 : 0;
$message = isset($errors[$errorCode]) ? $errors[$errorCode] : 'The file "%s" was not uploaded due to an unknown error.';
return sprintf($message, $this->getClientOriginalName(), $maxFilesize);
}
// SplFileInfo 是 PHP 的原生類
Symfony\Component\HttpFoundation\File\File extends \SplFileInfo;
成員 | 說明 | 示例 |
---|---|---|
guessExtension() | 根據檔案的 MIME 型別返回檔案字尾名 ,失敗返回 null | - |
getMimeType() | 返回檔案的 MIME 型別 | - |
有錯誤的地方歡迎指出 ,或者補充也可以 ,感謝每個對我提出建議的人
本作品採用《CC 協議》,轉載必須註明作者和本文連結