From 9ac0fe798db836e4b38979db90814170905b358f Mon Sep 17 00:00:00 2001 From: Effer Date: Mon, 15 Jun 2015 15:39:42 +0200 Subject: [PATCH] Pendant upload file --- CNCPendant.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++ bCNC.py | 6 ++++++ index.html | 26 +++++++++++++++++++++--- 3 files changed, 84 insertions(+), 3 deletions(-) diff --git a/CNCPendant.py b/CNCPendant.py index 65ecd580c..2cdf0f25a 100644 --- a/CNCPendant.py +++ b/CNCPendant.py @@ -13,6 +13,7 @@ import json import threading import urllib +import re try: import urlparse @@ -101,6 +102,60 @@ def do_GET(self): else: self.mainPage(page[1:]) + #---------------------------------------------------------------------- + def deal_post_data(self): + boundary = self.headers.plisttext.split("=")[1] + remainbytes = int(self.headers['content-length']) + line = self.rfile.readline() + remainbytes -= len(line) + if not boundary in line: + return (False, "Content NOT begin with boundary") + line = self.rfile.readline() + remainbytes -= len(line) + fn = re.findall(r'Content-Disposition.*name="file"; filename="(.*)"', line) + if not fn: + return (False, "Can't find out file name...") + path = os.path.expanduser("~") + path = os.path.join(path, "bCNCUploads") + if not os.path.exists(path): + os.makedirs(path) + fn = os.path.join(path, fn[0]) + line = self.rfile.readline() + remainbytes -= len(line) + line = self.rfile.readline() + remainbytes -= len(line) + try: + out = open(fn, 'wb') + except IOError: + return (False, "Can't create file to write, do you have permission to write?") + + preline = self.rfile.readline() + remainbytes -= len(preline) + while remainbytes > 0: + line = self.rfile.readline() + remainbytes -= len(line) + if boundary in line: + preline = preline[0:-1] + if preline.endswith('\r'): + preline = preline[0:-1] + out.write(preline) + out.close() + return (True, "%s" % fn) + else: + out.write(preline) + preline = line + return (False, "Unexpected Ends of data.") + + + #---------------------------------------------------------------------- + def do_POST(self): + result,fMsg=self.deal_post_data() + if(result): + httpd.app._pendantFileUploaded=fMsg + #send empty response so browser does not generate errors + self.do_HEAD(200, "text/text") + + # --------------------------------------------------------------------- def mainPage(self, page): global prgpath diff --git a/bCNC.py b/bCNC.py index ce297f1f7..679e4dcdc 100755 --- a/bCNC.py +++ b/bCNC.py @@ -362,6 +362,7 @@ def __init__(self, master, **kw): self._wcsUpdate = False self._probeUpdate= False self._gUpdate = False + self._pendantFileUploaded = None self.running = False self._runLines = 0 #self._runLineMap = [] @@ -3952,6 +3953,11 @@ def monitorSerial(self): if self._gcount >= self._runLines: self.runEnded() + # Load file from pendant + if self._pendantFileUploaded!=None: + self.load(self._pendantFileUploaded) + self._pendantFileUploaded=None + self.after(MONITOR_AFTER, self.monitorSerial) #---------------------------------------------------------------------- diff --git a/index.html b/index.html index aad8e2339..38f903bfa 100644 --- a/index.html +++ b/index.html @@ -182,6 +182,20 @@ sendGcode("G90"); } // sendMove + function fileChange() + { + var formData = new FormData($('#upload-file')[0]); + $.ajax({ + url: '/upload', //Server script to process data + data: formData, + type: 'POST', + cache: false, + contentType: false, + processData: false + }); + } + + /* PERFORM THESE ACTIONS ONCE THE PAGE HAS LOADED */ $(document).ready(function () { //set up fast click to handle mobile browser delay @@ -287,10 +301,16 @@

bCNC Pendant


-
+
Command: - - + + +
+
+
+ Select file to upload: + +