同样的事情 可以用以下代码实现:
header('Content-Type:image/jpeg');
readfile('a.jpg');
但我真的被 Yii 2 的 Response
弄晕了。
写完题目,想起 Yii 2 中的验证码那块是否可以借鉴一下。
谢谢!
同样的事情 可以用以下代码实现:
header('Content-Type:image/jpeg');
readfile('a.jpg');
但我真的被 Yii 2 的 Response
弄晕了。
写完题目,想起 Yii 2 中的验证码那块是否可以借鉴一下。
谢谢!
同样的问题, 在 stackoverflow的回答
受 @湿湿 的启发, 我的实际代码
public function actionIndex($img = false)
{/*{{{*/
$imgFullPath = Yii::getAlias('@webroot').'/'.Yii::$app->params['uploadDir'].'/'.$img;
if (!$img || !file_exists($imgFullPath))
throw new NotFoundHttpException('requested page not exists.');
$response = Yii::$app->getResponse();
$response->headers->set('Content-Type', 'image/jpeg');
$response->format = Response::FORMAT_RAW;
if ( !is_resource($response->stream = fopen($imgFullPath, 'r')) )
throw new \yii\web\ServerErrorHttpException('file access failed: permission deny');
return $response->send();
}/*}}}*/
通过以下文档的各种属性,可以看到如何实现你说的例子一样的功能
http://www.yiiframework.com/doc-2.0/yii-web-response.html
首先是 $acceptMimeType 属性,就是设置header
或者通过
$headers 属性,批量设置 header
然后你需要把图片发出去,意味着数据需要使用二进制流的形式发出去。
那么就可以通过设置
$data 属性来做到。因为他是 mixed 类型
$content 属性就不行。因为他是 string 类型
并且
$content 的属性也说明了,仅在 $data 属性没有设置的情况下才会使用
最后发现了一个属性
$format
根据文档的解释为:response的数据格式,用于转换$data或者$content的数据格式。
下面有一些选项。
通常要直接显示为图片都是使用 RAW 格式,即“未经加工”过的数据。
那么通过上面这些属性就能达到你的目的。
最后说一句,如果你要的是使用简单便捷,那么使用这种方案会让你痛苦。但是如果你想要的是管理简单便捷。那么使用框架的属性、方法去做到这些,当然是更加的舒服。