Разбор файла CSV в JSON после загрузки с использованием временной копии

Я почти заканчиваю создавать функциональность для разбора 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>

Предупреждение и уведомления
введите описание изображения здесь

0

Решение

Ну, это немного зависит от того, где эта функция 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;
}
});
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]