0

假设我有一张桌子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
4

2 回答 2

2

@Mark 的回答只涵盖了您需要的一小部分,所以这里有更多:

顺便说一句,专家上传插件可能比链接的更受欢迎。由星星和分叉组成,它的流行度大约是 uploadpack的两倍。

您需要将 csv 数据解析为有利于保存的蛋糕格式。这里有一些课程可以做到这一点。查看使用测试

对于您想要避免的大量数据,saveAll()因为它会为每一行创建一个插入。使用来获取一些关于批量插入的想法。

老实说,如果您要导入 300MB CSV 文件,您应该使用LOAD DATA INFILE速度更快的 MySQL。http://dev.mysql.com/doc/refman/5.1/en/load-data.html

于 2013-01-06T23:10:46.260 回答
1

你最好使用 3rd 方库,最流行的是:uploadpack:https ://github.com/szajbus/uploadpack

于 2013-01-06T21:38:17.580 回答