我有一台服务器设置为在不同的域上提供网页(特别是移动设备或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 . "\n\n";
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;
对于图像处理,您可以尝试干预