这几天处理了一个文件上传的问题。使用的是比较常用的Apache的一个模块。问题的关键不在于后台程序,经过测试,后台是没有问题的,关键还在前端。因为我使用ie6时可以成功上载,而使用Firefox和chrome以及IE8时就会上载失败。在网上搜了下,相关的信息很少。后来我在调试时发现ie6通过<input type="file">传上去的文件名为带有完整本地路径的文件名,如“c:/myfile/test.doc”,而在其他的浏览器中则只有文件名"test.doc"。到Firefox的官网上看了下文档,原来是因为安全原因,因为完整的路径容易泄露用户信息,并且没有用,所以Firefox等就只返回文件名。IE8这些新的浏览器也都是只显示文件名。
找到问题所在,问题也就解决了一半。在后台代码里加入一个判断,看看filename里是否有“/”,如果有,就从最后一个"/"开始读文件名。因为文件名是不能含有"/"和“/”的,所以这种方法基本上就把这个问题解决了。
下面是我使用的后台代码: