说我有一张桌子objects
:
CREATE TABLE objects (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
someinfo VARCHAR(255),
);
这样的文本文件:
name,someinfo
"firstname","firstinfo"
"secondname","secondinfo"
...
如何在CakePHP中上传此文本文件以处理数据并创建对象?处理不是问题,我已经覆盖了。我不知道如何上传文件。
注意:文件最大可达300MB。
修改
我尝试使用LOAD DATA INFILE
作为dogmatic69建议,使用以下代码:
$filefullname = $this->request->data['File']['file']['tmp_name'];
debug($filefullname);
$query = 'LOAD DATA LOW_PRIORITY INFILE "'.$filefullname.'" INTO TABLE agencies FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY """" LINES TERMINATED BY "\r" IGNORE 1 LINES';
$this->Agency->query($query);
但是,我得到以下输出:
'C:\Windows\Temp\phpB413.tmp'
Error: SQLSTATE[HY000]: General error: 29 File 'C:\ProgramData\MySQL\MySQL Server 5.5\data\WindowsTempphpB413.tmp' not found (Errcode: 2)
SQL Query: LOAD DATA LOW_PRIORITY INFILE "C:\Windows\Temp\phpB413.tmp" INTO TABLE agencies FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY """" LINES TERMINATED BY "\r" IGNORE 1 LINES
答案 0 :(得分:2)
@Mark的答案只涵盖了你需要的一小部分,所以这里有更多:
Btw savants upload plugin可能比链接的更受欢迎。走向星星并将其大概两次分叉,与uploadpack一样受欢迎。
您需要将csv数据解析为适合保存的蛋糕格式。 here就是这样做的几个班级。查看tests的使用情况
您希望避免使用大量数据saveAll()
,因为它会为每一行创建一个插入内容。有关批量插入的一些想法,请使用this。
老实说,如果您要导入300MB CSV文件,那么您应该使用MySQL LOAD DATA INFILE
,这要快得多。 http://dev.mysql.com/doc/refman/5.1/en/load-data.html
答案 1 :(得分:1)
你最好使用第三方库,最受欢迎的是:uploadpack:https://github.com/szajbus/uploadpack