在CodeIgniter中上传Autocad文件(.dwg,.dxf,.dwf等)

3
我在./system/application/config/mimes.php中添加了这行代码。
'dwg' => array('application/acad', 'application/x-acad', 'application/autocad_dwg', 'image/x-dwg', 'application/dwg', 'application/x-dwg', 'application/x-autocad', 'image/vnd.dwg', 'drawing/dwg'),

我尝试上传一个.dwg文件,但出现以下错误:

您尝试上传的文件类型不允许。

如何上传.dwg文件?

2个回答

2
文件扩展名dwg必须在您的allowed_types中:
$config['allowed_types'] = 'dwg';
$this->load->library('upload', $config);

如果您想允许多种类型,则必须使用管道符|进行分隔:

$config['allowed_types'] = 'dwg|dxf|dwf';

参考:http://codeigniter.com/user_guide/libraries/file_uploading.html

虽然当前用户指南中似乎没有记录,但是使用星号*将允许上传所有类型的文件:

$config['allowed_types'] = '*';

你能否发布你的实际代码,包括上传配置和示例文件名(如果可能的话)?你确定你可以上传其他文件类型了吗? - Wesley Murch
配置:$config['file_name'] = date('YmdHis').'_'.rand(0,9).'.'.$this->getFileExt($fieldName); $config['upload_path'] = realpath('./uploads/client/bi/'); $config['allowed_types'] = 'dxf|dwg|dwf|gif|jpg|png|jpeg'; $config['max_size'] = '2000'; 我添加了以下行来更改mime设置; 'dwf' => array('drawing/x-dwf', 'model/vnd.dwf'),'dwg' => array('application/acad', 'image/vnd.dwg', 'image/x-dwg'), 'dxf' => array('application/dxf', 'image/vnd.dwg', 'image/x-dwg')。现在它可以完美上传图片,但尝试上传AutoCAD文件时会显示错误。 - Anil Sharma
那些 MIME 类型对我来说根本不起作用。我使用了application/octet-stream并尝试了一下,它起作用了!虽然我解决了这个问题,但仍然想知道为什么那些 MIME 类型不起作用? - Anil Sharma
@AnilSharma:如果那是解决方案,请发布您自己的答案。几天后,您可以接受它。这将有助于遇到相同问题的人们。 - Wesley Murch
什么意思?它不允许你发布自己的答案吗? - Wesley Murch
显示剩余3条评论

2

解决方案:

对我来说,那些MIME类型根本不起作用。我只使用了application/octet-stream并尝试了一下,它奏效了!我解决了问题,但仍然想知道为什么那些MIME类型不起作用?!


对于那些在几年后阅读此内容的人:这个答案是极不推荐的。application/octet-stream是“杂项”的MIME类型等效物,因此服务器仍然可能被欺骗运行恶意代码(例如exe)。请参见https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet#File_uploads以获得更多见解。 - Jarrod
我同意你的看法。这是一个将近5年前的问题,当时我第一次遇到这个问题。无论如何,感谢你的回复。 - Anil Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接