哎,整整折腾一个下午。

本来好好的,thinkphp 自动的uniq方式保存的文件名,非要使用原文件名,真心蛋疼~~

然后就只好写个脚本 把原来的所有文件都重新命名一下 - - 然后把数据库对应字段也改为对应的中文文件名。

因为对自己的脚本太自信,也就没有备份数据库。然后杯具发生了 - - 是的,它真滴发生了。。。。

在本地测试(wamp)的fread方式下载文件好好的,结果上传到服务器(LNMP)就杯具鸟,下载的时候提示找不到文件,查看路径文件真真切切的就在那里,不远不近,怎么搞都不好使 - -

折腾啊折腾,各种输出变量调试,经过近2个小时的折腾。发现了一点问题,那就是在本地测试的时候把中文文件名传参数过去之后,服务器端获取的也是中文,然后就顺利的读到了文件。

然而上传到LNMP之后,传的中文文件名被URL转码了(相当于自动urlencode),惯性的以为转码后服务端也可以认识,然而并不是这样的。。。。

file_exists 介个函数不认识转码的东西,它只认识一样的东西。因此问题就出在这里。 最后通过接收的URL中文部分进行反转码(urldecode),然后再执行file_exists这个函数就搞定了。。。 哎 我的半个下午就毁在这里了,内牛满面哇 - -0

下面上一段下载的代码吧

public function download_file(){
$file = urldecode($this->_get('file'));
$base_path = $_SERVER['DOCUMENT_ROOT'].'/Uploads/Attachement/';
$file = iconv('UTF-8','gb2312',$file);
$file = $base_path. $file;
var_dump($file);
// exit();
if(file_exists($file)){
$length = filesize($file);
// $type = mime_content_type($file);
/* $fi = new finfo(FILEINFO_MIME);
$type = $fi->buffer(file_get_contents($file));*/
$showname = ltrim(strrchr($file,'/'),'/');
header("Content-Description: File Transfer");
// header('Content-type: ' . $type);
header('Content-Length:' . $length);
header('content-type:text/html; charset=utf-8'); if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) { //for IE
header('Content-Disposition: attachment; filename="' . rawurlencode($showname) . '"');
} else {
header('Content-Disposition: attachment; filename="' . $showname . '"');
}
ob_clean();
flush();
readfile($file);
exit;
} else {
exit('文件已被删除!');
}
}

客户端很简单咯:

<div><a href="__APP__/Index/download_file/file/<{$post.attachment}>">下载{$post.attachment}</a></div>

顺便吐个槽,最近两天比较郁闷, 我们的老板,对,他是连office word都用不明白的银,然后在他眼里,软件开发完成后就不能有BUG,使用不方便的情况也算BUG奥。然后做的越多,那被的锅就越多,然后各种被嫌弃,还让我自己找问题,美其名曰主动是天堂。好叭,被你打败了,没啥好留恋的了,春节后,下一站再见!

——————后记

哈哈,不得不说上面客户端的代码还是有点问题,如果附件是图片等格式的话,那上面的代码会导致部分内容无法下载。经过测试,修改为以下形式即可下载成功。

<div><a href="__APP__/Index/download_file?file=<{$post.attachment}>">下载{$post.attachment}</a></div>

呵呵哒,LNMP下通过fread方式下载文件时,中文名称文件找不到文件的更多相关文章

  1. 当打开一个.h或.cpp文件时, Solution Explorer就自动展开文件所在的目录

    当打开一个.h或.cpp文件时,  Solution Explorer就自动展开文件所在的目录: 如果不想展开: Tools           -> Options           -&g ...

  2. python3写入csv文件时中文为乱码

    今天修改李万的爬虫时把页面上的中文写入csv文件时,中文总是乱码.通过上网搜索得到解决.解决的办法是打开文件是需加参数 encoding='utf-8-sig' .感谢博客园的菜鸟Alex.他相关博客 ...

  3. node.js在读取文件时中文乱码问题

    断更很久了........从今天开始会努力的持续更博,积极学习. 言归正传.今天在写node.js的demo时发现一个bug.我在node中读取本地的text文件时,发现英文的内容可以被读取,但是中文 ...

  4. python 数据写入json文件时中文显示Unicode编码问题

    一.问题描述 import json dir = { '春晓':'asfffa', '春眠不觉晓' : '处处闻啼鸟', '夜来风雨声' : 56789, 'asdga':'asdasda' } fp ...

  5. python读写文件时中文的转码问题

    读写文件都要将中文转为unicode字符. 读文件: u = unicode(s, 'gbk') 这里不能使用encode 写文件: u = encode('utf')

  6. OkHttp上传文件,服务器端请求解析找不到文件信息的问题

    长话短说,不深入解释了,官方给的上传案例代码: private static final String IMGUR_CLIENT_ID = "..."; private stati ...

  7. HTML 表单 存为EXCEL文件时 中文显示乱码

    在做宣传品发放系统时,需求要把数据库查询的记录生成表单并转存excel文件. 在转存的EXCEL文件中文显示乱码,表格和其他字符正常,检查后发现是创建EXCEL文件打开模式不对 之前: myfile ...

  8. 解决Scrapy抓取中文网页保存为json文件时中文不显示而是显示unicode的问题

    注意:此方法跟之前保存成json文件的写法有少许不同之处,注意区分 情境再现: 使用scrapy抓取中文网页,得到的数据类型是unicode,在控制台输出的话也是显示unicode,如下所示 {'au ...

  9. win10 设置文件夹别名、修改文件夹图标、修改文件夹别名、英文目录和中文目录、设置文件夹中文名称、快捷访问显示设置中文

    最近在设置文件夹的时候发现个有趣的事情: 系统路径 C:\Users\Administrator  内的文件夹不仅有图标还显示中文名称,但是打开路径的时候显示的却是英文,这就激发了我的探索欲,究竟是为 ...

随机推荐

  1. linux上搭建ftp

    linux上搭建ftp 重要 解决如何搭建ftp         解决用户指定访问其根目录         解决访问ftp超时连接         解决ftp主动连接.被动连接的问题 1.安装ftp ...

  2. linux下rename用法--批量重命名

    Linux的rename 命令有两个版本,一个是C语言版本的,一个是Perl语言版本的,早期的Linux发行版基本上使用的是C语言版本的,现在已经很难见到C语言版本的了, 由于历史原因,在Perl语言 ...

  3. Python学习手册 :Python 学习笔记第一天

    获取当前目录路径: import os os.getcwd() 在输入python程序时,尽量让不是嵌套结构的语句处于最左侧,要不然系统或许会出现"SyntaxError"错误 获 ...

  4. asp.net或者MVC定时自动执行某操作

    using System; using System.IO; using System.Runtime.CompilerServices; using System.Text; namespace S ...

  5. WPF中的imagesource 和内存图片的处理

    [转载]ImageSource的使用心得 很多时候,我们会使用图片来装饰UI,比如作为控件背景等. 而这些图片可以分为两种形式,即存在于本地文件系统中的图片和存在于内存中的图片 对于这两种形式的图片, ...

  6. zookeeper curator处理会话过期session expired

    本文介绍在使用curator框架的时候如何handle session expire. 1.什么是zookeeper的会话过期? 一般来说,我们使用zookeeper是集群形式,如下图,client和 ...

  7. 【转载】基于VoiceOver的移动web站无障碍访问实战

    文章转载自 张鑫旭-鑫空间-鑫生活 http://www.zhangxinxu.com/wordpress/ 原文链接:http://www.zhangxinxu.com/wordpress/?p=5 ...

  8. Rythm.js 使用教程详解

    转载自 http://blog.csdn.net/qq_26536483/article/details/78261515 简介 rythm.js是一款让页面元素跳动起来的插件,并且带音乐,共7种用法 ...

  9. HTML之头部标签

    <header> head 元素元素包含了所有的头部标签元素 可以添加在头部区域的元素标签为: title,style,meta,link,script,noscript,base < ...

  10. aspnet中通过多条件筛选来显示数据的实现

    UI图: 功能实现: 1.勾选住哪个选项之后,就加入了筛选.支持姓名的模糊查询. 2.对筛选出来的数据可以直接修改,并更新回数据库. 说明:显示的数据来自T_User表.数据显示控件使用的是 List ...