附件下载显示下载的名称。
通过附件表fa_attachment 的url去查出中文
//需求附件的名称
$reqattachement_url = $archives["reqattachment"];
if($reqattachement_url !="" && $reqattachement_url != null){
$reqattachement = Attachment::where("url",$reqattachement_url)->find();
if($reqattachement){
$reqattachement_filename = $reqattachement["filename"];
$this->view->assign("__reqattachement_filename__", $reqattachement_filename);
}else{
$this->view->assign("__reqattachement_filename__", "");
}
}
//下载需求附件--需求方上次
public function downloadReqattachmentFile()
{
$fileaddress = $this->request->param("fileaddress");//订单附件表的ID
if (!$fileaddress) {
$this->error(__('Operation failed'));
}
//需求附件的名称
$reqattachement_filename="match";
$reqattachement = Attachment::where("url",$fileaddress)->find();
if($reqattachement){
$reqattachement_filename = $reqattachement["filename"];
}
//$obj = $this->download_db_log_api($id) ;
$sourcefile = $fileaddress;
$title = $reqattachement_filename;
//下载,返回下载路径。
$http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
$http_front = $http_type.$_SERVER['HTTP_HOST'];
$sourcefileUrl = $http_front.$sourcefile;
$filePath = $_SERVER['DOCUMENT_ROOT'].$sourcefile;
//$postfix=strrchr($filePath, '.');
$fileName = $title;
//begin add 20211226 解决大文件下载报错的问题,file_get_contents($filePath)这个方式不行。
set_time_limit(0);
$filesize = filesize($filePath);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename=' . $fileName);
// 打开文件
$fp = fopen($filePath, 'rb');
// 设置指针位置
fseek($fp, 0);
// 开启缓冲区
//ob_start();
// 分段读取文件
while (!feof($fp)) {
$chunk_size = 1024 * 1024 * 2; // 2MB
echo fread($fp, $chunk_size);
ob_flush(); // 刷新PHP缓冲区到Web服务器
flush(); // 刷新Web服务器缓冲区到浏览器
// sleep(1); // 每1秒 下载 2 MB
}
// 关闭缓冲区
//ob_end_clean();
fclose($fp);
}