我差不多已经完成了将CSV文件解析为JSON的功能,只需要将它拼凑在一起就需要帮助。它的工作方式是使用AJAX / Jquery上传文件。一旦文件上传并发送,PHP将解析CSV文件到JSON然后执行。
解析后,转换后的文件将作为JSON对象推送或发送到API。这是我一直在工作的代码。对于上传我正在使用此插件AJAX/JQuery File Uploader
此功能也是基于使用RactiveJS
构建的AJAX / Jquery文件上传器
这是我目前正在上传或放置文件的部分。网址指向upload.php
。
<div id="fileuploader">Upload</div>
<script>
$(document).ready(function() {
$("#fileuploader").uploadFile({
url: 'upload.php',
});
})
</script>
Uploads.php
有没有办法GET
上传文件的临时副本并使用我在下面构建的PHP代码解析将CSV转换为JSON
<?php
if ( 0 < $_FILES['file']['error'] ) {
echo 'Error' . $_FILES['file']['error'] . '<br/>';
}
else {
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);
}
?>
PHP(CSV到JSON)
现在正在手动声明文件。
<?php
$json_data = csvToJson('lms.csv');
?>
<?php
function csvToJson($fname) {
if (!($fp = fopen($fname, 'r') )) {
die("Can't open file");
}
else {
('Upload File');
}
$key = fgetcsv($fp, "1024", ",");
$json = array();
while ($row = fgetcsv($fp, "1024", ",")) {
$json[] = array_combine($key, $row);
}
fclose($fp);
foreach ( $json as $k=>$v ) {
$json[$k]['accountName'] = $json[$k]['ACCOUNT NAME'];
$json[$k]['dateRequested'] = $json[$k]['DATE'];
unset($json[$k]['ACCOUNT NAME']);
unset($json[$k]['DATE']);
}
return json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);
}
?>
<?php // $target_file = fopen($_FILES["fileToUpload"]["tmp_name"], 'r'); ?>
发送转换为API(Ractive / AJAX / JS)
正如您所看到的,发送部分是由点击事件(app.on)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ractive/0.9.0-build-48/ractive.js"></script>
<script type="text/javascript">
var app = new Ractive({
el : '#container',
template : '#template',
});
var proxy = 'http://192.168.1.126/lms-dev-noel/proxy.php';
var endpoint = 'account/leads/';
var rt = 'POST';
var url = proxy+'?endpoint='+endpoint+'&rt='+rt;
var lms_json = <?php echo json_encode($json_data); ?>;
var jobjects = JSON.parse(lms_json);
for ( i = 0; i < jobjects.length; i++ ) {
var data = jobjects[i];
console.log(data);
$.ajax({
type : 'POST',
url : url,
data : data,
dataType : 'json',
success : function() {
},
error : function(error) {
console.log('Error')
}
});
}
</script>
答案 0 :(得分:1)
嗯,这取决于csvToJson函数在代码中的位置。如果它在uploads.php中,或者在uploads.php中可以include
的单独文件中,那么您可以这样做:
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);
$json_data = csvToJson('uploads/' . $_FILES['file']['name']);
echo $json_data;
然后在脚本中,更改
var lms_json = <?php echo json_encode($json_data); ?>;
到
var lms_json;
并将其移至您的javascript顶部。
您似乎在尝试在API调用之前分配变量。相反,您需要从uploadFile调用的响应中捕获数据(根据这些文档:http://hayageek.com/docs/jquery-upload-file.php):
$("#fileuploader").uploadFile({
url: 'upload.php',
onSuccess:function(files,data,xhr,pd)
{
//data: response from server
lms_json = data;
}
});