gpt4 book ai didi

php - Laravel S3 文件上传 MimeType 问题

转载 作者:行者123 更新时间:2023-11-28 12:11:15 25 4
gpt4 key购买 nike

我在通过 CDN 从 S3 以错误的 mimetype 提供 CSS 文件时遇到问题。

这是我注意到的。如果我通过我的网站上传文件,CSS 会显示在 CDN url 处,但网站不会使用它(不会呈现布局),因为它显示为:

资源解释为样式表但使用 MIME 类型 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);
}

}

我可以从文件中获取 mimetype $mime = $file->getMimeType();,但我不知道如何将它连同上传到 s3 Storage::put($directoryname . "/". $filename, $contents);

最佳答案

您可以通过可选的 $config 参数告诉 S3 您文件的 MIME 类型:

Storage::put($directoryname . "/" . $filename, $contents, ['mimetype' => $mime]);

css文件的mime类型是text/css

关于php - Laravel S3 文件上传 MimeType 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31161606/

25 4 0
文章推荐: ios - 如何调整今天扩展的高度?
文章推荐: css - 使 flexbox 优先显示更多元素而不是元素的最大宽度
文章推荐: javascript - 如何以编程方式设置所有 将 wmode 设置为不透明?