Я почти заканчиваю создавать функциональность для разбора CSV-файлов в JSON, и мне просто нужна помощь в их объединении. Это работает так, что файлы будут загружены с использованием AJAX / Jquery. После того, как файлы будут загружены и отправлены PHP для анализа файла CSV в JSON, будет выполнен.
После синтаксического анализа преобразованный файл будет отправлен или отправлен в API-интерфейс в виде объекта JSON. Вот код, над которым я работал. Для загрузки я использую этот плагин AJAX / JQuery File Uploader
Эта функциональность также основана на использовании RactiveJS
AJAX / Jquery File Uploader
Это раздел, в котором я сейчас загружаю или размещаю файл. 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');
?>
<?phpfunction 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, или в отдельном файле, который вы можете include
в uploads.php, тогда вы можете просто сделать:
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;
}
});
Других решений пока нет …