如何使用laravel 4安静地返回图像?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用laravel 4安静地返回图像?相关的知识,希望对你有一定的参考价值。

我有一台服务器设置为在不同的域上提供网页(特别是移动设备或localhost:9000,其中laravel在localhost:8000上提供服务)。我正在尝试将这些页面上的图像请求返回到我的laravel服务器,但我遇到了问题。在论坛帖子中,我认为在请求上设置标题可以解决问题,但是当我导航到/api/v1/images/default.jpg时,没有显示默认的猫图像。相反,我得到一个没有图像的盒子。

现在,图像在我的公共文件夹中,所以如果我浏览到/public/images/default.jpg我会看到我的猫图像,但我宁愿在我的/ api / v1 / ...路径中提供图像。

Route::get('images/{imageName}', function($imageName){
    $img = 'public/images/' . $imageName;
    // return $img;
    echo $img . "

";
    if(File::exists($img)) {
        // return "true";
        // return Response::make($img, 200, array('content-type' => 'image/jpg'));
        // return Response::download($img, $imageName);
        // Set headers
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-Disposition: inline; filename="".$imageName.""");
        header("Content-Type: image/jpg");
        header("Content-Transfer-Encoding: binary");
        //stream the file out
        readfile($img);
        exit;
    } else {
        return "false";
    }
    return $img;
    // return File::exists($img);
    // return File::isFile('/images/' . $imageName);
    // return $imageName;
    // if(File::isFile('images/' + $imageName)){
    //  return Response::make('images/' + $imageName, 200, array('content-type' => 'image/jpg'));
    // }
});
答案

使用Response::stream方法:

Route::get('/image', function () {

      return Response::stream(function () {

              $filename = '/path/to/your/image.jpg';

              readfile($filename);

      }, 200, ['content-type' => 'image/jpeg']);
});
另一答案

如果你想从ftp服务器流式传输你的图像($ imageName是参数)

    $server   = Config::get('ftpconfig.server');
    $usuario  = Config::get('ftpconfig.user');
    $password = Config::get('ftpconfig.password');
    $path = Config::get('ftpconfig.path');

    $file_location = "ftp://$usuario:".urlencode($password)."@".$server.$path.$imageName;

    $headers = [
        "Content-Type" => "image/jpeg",
        "Content-Length" => filesize($file_location),
        "Content-disposition" => "inline; filename="" . basename($file_location) . """,
    ];

    return Response::stream(function () use ($file_location){

        readfile($file_location);
    }, 200, $headers)
另一答案

@Andrew Allbright,

如果您的图像位于laravel app目录中,则可以使用

$img = app_path().'/api/v1/images/' . $imageName;

对于图像处理,您可以尝试干预

以上是关于如何使用laravel 4安静地返回图像?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.8 有条件地插入 sql 片段

如何从Android片段中的相机获取图像

如何使用接口将活动回调返回到片段

从片段中的相机意图返回后屏幕变为白色

Laravel:如何在控制器的几种方法中重用代码片段

如何限制laravel storage内的文件被访问