Как загрузить файл, который был обнаружен как новое дополнение к URL? - PullRequest
0 голосов
/ 27 марта 2019

Мне нужно загрузить на URL файл, уведомленный как новое дополнение к папке, которую я просматриваю.Как мне сделать это без форм?

Я пишу базовый синхронизатор файлов, который использует настольное приложение Electron в качестве клиента, сервера Python и конечной точки AWS.Я использую назначенный URL-адрес для запросов на загрузку / загрузку и у меня есть chokidar для просмотра папки, настроенной для синхронизации.

Когда я получаю уведомление о добавлении через Chokidar, я звоню на свой сервер Python и получаю предварительно назначенный URL-адресдля загрузки.Эта часть работает нормально.

Как только я получу URL, мне нужно загрузить файл.У меня нет HTML-компонента, связанного с этой операцией (и я не хочу добавлять). Я прочитал, что могу загружать файл с помощью AJAX с данными форм, но для этого требуется столбец «данные».Как мне это заполнить?

            watcher
              .on('add', function(dir) {
                    console.log('File', dir, 'has been added');
                    xhr.open("POST", url, true);
                    xhr.setRequestHeader("Content-Type", "application/json");
                    results.innerHTML = '';

                    data = JSON.stringify({"operation": "uploadFile", "bucketName": "deadlinefighters", "fileDetails": {"fileName": dir.replace(/^.*[\\\/]/, '')}});

                    xhr.onreadystatechange = function () {
                        if (xhr.readyState === 4 && xhr.status === 200) {
                            jsonResponse = JSON.parse(xhr.responseText);

                            var content;

                            fs.readFile(dir, function read(err, data) {
                                if (err) {
                                    throw err;
                                }
                                content = data; 
                            });

                            $.ajax({
                                url: jsonResponse["url"],    
                                type: 'PUT',   
                                data: content, //This is the part I do not know how to fill right
                                async: false,
                                success: function () {
                                    results.innerHTML = "Uploaded!"
                                }
                            });
                            listObjectsinServer();
                        }
                        else if(xhr.status!=200) {
                            results.innerHTML = 'ERROR!';
                        }
                    };
                    xhr.send(data);

              })

Я пробовал fs.readFile, но он тоже не работает.Основываясь на некоторых ответах SO, я поместил вызов AJAX внутрь, но даже это не сработало.Я чувствую, что могу неправильно понять это поле.

...