我问这个是因为我的请求在大于4Mb的文件上不断“内容长度不匹配”,即使内容长度和文件大小完全匹配。如果我删除内容长度标题,一切正常。
在内联内容(不是附件)的标题中使用内容长度是否有优势或必要性?
[编辑]代码:
public function actionViewFile($id) {
$model = File::model()->findByPk($id);
if(!$model) {
throw new CHttpException(404, "File not found");
}
$data = file_get_contents($this->storageDir.'/'.$model->fileName);
header('Content-type: '.$model->mime_type);
header('Content-length: '.$model->size); //I have tried calling `mb_strlen($data);`
echo $data;
Yii::app()->end(); //I have tried calling `die;`
}
我使用的框架是Yii,这对于这个问题的背景并不重要。
答案 0 :(得分:0)
Content-Length entity-header字段指示实体主体的大小,以十进制数量的OCTET发送给接收者,或者在HEAD方法的情况下,指示实体主体的大小。如果请求是GET,则已发送。
尝试按照以下方式使用filesize():
public function actionViewFile($id) {
$model = File::model()->findByPk($id);
if(!$model) {
throw new CHttpException(404, "File not found");
}
$filepath= $this->storageDir.'/'.$model->fileName;
$data = file_get_contents($filepath);
header('Content-type: '.$model->mime_type);
header("Cache-Control: no-cache, must-revalidate");
header('Content-Length: ' . sprintf('%u', filesize($filepath)))
echo $data;
return Yii::app()->end(); //I have tried calling `die;`
}