如何将已检测为新添加的文件上传到URL?

时间:2019-03-26 23:40:04

标签: javascript electron chokidar

我需要将一个作为新添加通知的文件上传到URL,这是我正在监视的文件夹。没有表格我该怎么办?

我正在编写一个基本的文件同步器,该同步器使用Electron桌面应用程序作为客户端,Python服务器和AWS终端节点。我正在使用预先签名的URL进行上载/下载请求,并让chokidar监视了设置为同步的文件夹。

当我通过Chokidar收到有关“添加”的通知时,我将呼叫我的Python服务器并获得一个预签名的URL进行上传。这部分工作正常。

获得URL后,我需要上传文件。我没有与此操作关联的HTML组件(并且不想添加),我读到可以使用AJAX和formdata上载文件,但它需要“ data”列。我该如何填写?

            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调用放入其中,但即使这样也没有用。我觉得我可能会误解这个领域。

0 个答案:

没有答案