【问题标题】:Laravel S3 File Upload MimeType IssueLaravel S3 文件上传 MimeType 问题
【发布时间】:2015-07-01 22:57:52
【问题描述】:

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

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

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);
    }       

}

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

【问题讨论】:

    标签: php css laravel amazon-s3 laravel-5


    【解决方案1】:

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

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

    css文件的mime类型为text/css

    【讨论】:

    • 我这样做并收到了Array to string conversion 错误
    猜你喜欢
    • 1970-01-01
    • 2017-03-25
    • 2014-04-29
    • 2020-12-10
    • 2013-08-11
    • 2016-04-07
    • 2019-06-06
    • 2014-11-20
    • 2014-02-19
    相关资源
    最近更新 更多