У меня возникла проблема с тем, что файл CSS поддерживается под неправильным mimetype из S3 через CDN.
Вот что я заметил. Если я загружу файл через свой веб-сайт, CSS отобразится на URL-адресе CDN, но не будет использоваться веб-сайтом (не отображает макет), потому что он появляется как:
Resource interpreted as Stylesheet but transferred with MIME type text/x-asm
Если я перейду прямо к ведро S3 и загружу прямо в него, файл отобразит CSS так, как должен, и макет сайта выглядит так, как должен.
Это мой код загрузки в Laravel:
public function upload(Request $request) { $files = $request->file('asset'); $directoryname = Auth::user()->assetdirectory; $userId = Auth::user()->id; $userAssets = Auth::user()->assets; $file_count = count($files); $uploadcount = 0; foreach($files as $file) { $data = Input::all(); $rules = array ( 'asset' => 'required' ); $messages = array ( 'asset.mimes' => 'That file type is not allowed. Please try a .css or .js file type.', 'asset.required' => 'A file is required.' ); $validator = Validator::make($data, $rules, $messages); if($validator->passes()) { if ($file == null) { return redirect('upload')->with('errornotice', 'A file is required.'); } $filename = $file->getClientOriginalName(); $fileext = $file->getClientOriginalExtension(); $filesize = $file->getClientSize(); $mime = $file->getMimeType(); foreach($userAssets as $asset) { if($asset->name == $filename) { return redirect('upload')->with('errornotice', 'A file with that name already exist'); } } if($fileext != "css" && $fileext != "js") { return redirect('upload')->with('errornotice', 'That file type is not allowed. Please try a .css or .js file type.'); } $contents = file_get_contents($file->getRealPath()); Storage::put($directoryname . "/" . $filename, $contents); $asset = new Asset; $asset->name = $filename; $asset->user_id = $userId; $asset->size = $filesize; $asset->extension = $fileext; if($fileext == "css") { $asset->url = ('<link rel="stylesheet" href="' . 'https://cdn.xxx.io/' . $directoryname . "/" . $filename . '">'); } else if($fileext == "js") { $asset->url = ('<script src="' . 'https://cdn.xxx.io/' . $directoryname . "/" . $filename . '">' . '</script>'); } $asset->save(); $uploadcount ++; } } if($uploadcount == $file_count){ return redirect('dashboard')->with('notice', 'Your files have been added.'); } else { return Redirect::to('upload')->withInput()->withErrors($validator); } }
обеспеченныхpublic function upload(Request $request) { $files = $request->file('asset'); $directoryname = Auth::user()->assetdirectory; $userId = Auth::user()->id; $userAssets = Auth::user()->assets; $file_count = count($files); $uploadcount = 0; foreach($files as $file) { $data = Input::all(); $rules = array ( 'asset' => 'required' ); $messages = array ( 'asset.mimes' => 'That file type is not allowed. Please try a .css or .js file type.', 'asset.required' => 'A file is required.' ); $validator = Validator::make($data, $rules, $messages); if($validator->passes()) { if ($file == null) { return redirect('upload')->with('errornotice', 'A file is required.'); } $filename = $file->getClientOriginalName(); $fileext = $file->getClientOriginalExtension(); $filesize = $file->getClientSize(); $mime = $file->getMimeType(); foreach($userAssets as $asset) { if($asset->name == $filename) { return redirect('upload')->with('errornotice', 'A file with that name already exist'); } } if($fileext != "css" && $fileext != "js") { return redirect('upload')->with('errornotice', 'That file type is not allowed. Please try a .css or .js file type.'); } $contents = file_get_contents($file->getRealPath()); Storage::put($directoryname . "/" . $filename, $contents); $asset = new Asset; $asset->name = $filename; $asset->user_id = $userId; $asset->size = $filesize; $asset->extension = $fileext; if($fileext == "css") { $asset->url = ('<link rel="stylesheet" href="' . 'https://cdn.xxx.io/' . $directoryname . "/" . $filename . '">'); } else if($fileext == "js") { $asset->url = ('<script src="' . 'https://cdn.xxx.io/' . $directoryname . "/" . $filename . '">' . '</script>'); } $asset->save(); $uploadcount ++; } } if($uploadcount == $file_count){ return redirect('dashboard')->with('notice', 'Your files have been added.'); } else { return Redirect::to('upload')->withInput()->withErrors($validator); } }
Я могу получить mimetype $mime = $file->getMimeType();
, но я не знаю, как отправить его вместе с загрузкой в s3 Storage::put($directoryname . "/" . $filename, $contents);
Вы можете указать S3 тип MIME вашего файла с помощью необязательного параметра $config
:
Storage::put($directoryname . "/" . $filename, $contents, ['mimetype' => $mime]);
Тип mime css-файлов – text/css
.