使用临时副本上传后将 CSV 文件解析为 JSON
Parse CSV file to JSON after uploading using temporary copy
我即将完成构建一个将 CSV 文件解析为 JSON 的功能,只是需要帮助将其拼凑起来。它的工作方式是使用 AJAX/Jquery 上传文件。一旦文件上传并发送 PHP 将 CSV 文件解析为 JSON 然后将执行。
解析后,转换后的文件将作为JSON对象推送或发送到API。这是我一直在使用的代码。对于上传,我正在使用这个插件 AJAX/JQuery File Uploader
此功能也是基于使用 RactiveJS 构建的
AJAX/Jquery 文件上传器
这是我当前上传或放置文件的部分。 URL 指向 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>
警告和注意事项
好吧,这在一定程度上取决于 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;
}
});
我即将完成构建一个将 CSV 文件解析为 JSON 的功能,只是需要帮助将其拼凑起来。它的工作方式是使用 AJAX/Jquery 上传文件。一旦文件上传并发送 PHP 将 CSV 文件解析为 JSON 然后将执行。
解析后,转换后的文件将作为JSON对象推送或发送到API。这是我一直在使用的代码。对于上传,我正在使用这个插件 AJAX/JQuery File Uploader
此功能也是基于使用 RactiveJS 构建的
AJAX/Jquery 文件上传器
这是我当前上传或放置文件的部分。 URL 指向 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>
警告和注意事项
好吧,这在一定程度上取决于 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;
}
});