Не удается проанализировать строку JSON, переданную от клиента, с файлом, встроенным в объект JSON, используя AJAX, сервер узлов и архитектуру Javascript? - PullRequest
0 голосов
/ 30 апреля 2020

Спасибо всем за вашу поддержку еще раз. Я создал приложение: Клиент: HTML, CSS, Javascript Сервер: Node.js, Javascript

Я использую AJAX для передачи и получения данных. Все работало нормально, пока я не попытался передать файл. Я не хотел использовать Formidable или Multer. Я сохранил файл в виде строки в JSON и передал на сервер следующим образом:

function UploadFile() {
    var files = document.getElementById("fileopen").files;
    var file = files[0];

    if(files && file) {
        var reader = new FileReader();

        reader.onload = function(readerEvt) {
            var objJSON = {
                "filestr": encodeURIComponent(readerEvt.target.result),
                "filename": file.name
            }   
            var strJSON = JSON.stringify(objJSON);            
            var xmlhttp = new XMLHttpRequest();

            xmlhttp.open("post", "../../SaveFile", true);
            xmlhttp.onreadystatechange = function() {
                if(xmlhttp.readyState === XMLHttpRequest.DONE && xmlhttp.status === 200) {                    

                }
            }
            xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
            xmlhttp.send("strJSON=" + strJSON);
        };
        reader.readAsText(file);
    }
}

На стороне сервера выглядит следующее:

app.post('/SaveFile', function(req, res) {console.log(req.body.strJSON);
    var strJSON = req.body.strJSON;
    var objJSON = JSON.parse(strJSON);console.log(objJSON);

    fs.writeFile(objJSON.filename, decodeURIComponent(objJSON.filestr), function (err) {
        if (err) 
            throw err;
        else {
            res.status(200);
            return res.send(objJSON.filestr);         
        }
    }); 
});

Файл представляет собой простой текст файл со следующим содержимым (во время выполнения это может быть любой файл (img, do c, xls, et c)):

Строка 1 Строка 2 Строка 3 & Строка 4 Строка 5 Строка 6 ü ü üÆ 101

Я использую encodeURIComponent для обработки '&', и кажется, что он работает нормально. Я получаю эту ошибку на стороне сервера. Вот вывод консоли:

{"filestr": "Строка 1 Строка 2 Строка 3 & Строка 4 Строка 5 Строка 6 ü ü ÆÆ Æ", "filename": "Rings.txt"} в JSON в позиции 20 токена в JSON .parse () в E: \ Company \ Sites \ Customers \ AMS \ server. js: 3153: 21 в Layer.handle [как handle_request] (E: \ Company \ Сайты \ Customers \ AMS \ node_modules \ express \ lib \ router \ layer. js: 95: 5) на следующем (E: \ Company \ Sites \ Customers \ AMS \ node_modules \ express \ lib \ router \ route. js: 137: 13) в Route.dispatch (E: \ Company \ Sites \ Customers \ AMS \ node_modules \ express \ lib \ router \ route. js: 112: 3) в Layer.handle [как handle_request] (E : \ Company \ Sites \ Customers \ AMS \ node_modules \ express \ lib \ router \ layer. js: 95: 5) в E: \ Company \ Sites \ Customers \ AMS \ node_modules \ express \ lib \ router \ index. js: 281: 22 в Function.process_params (E: \ Company \ Sites \ Customers \ AMS \ node_modules \ express \ lib \ router \ index. js: 335: 12) в следующем (E: \ Company \ Sites \ Customers \ AMS \ node_modules \ express \ lib \ router \ index. js: 275: 10) на E: \ Company \ Site s \ Customers \ AMS \ node_modules \ body-parser \ lib \ read. js: 130: 5

Ваша поддержка будет принята с благодарностью, поскольку я застрял в ней в течение последних двух дней. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...