]> git.immae.eu Git - perso/Immae/Projets/Nodejs/Surfer.git/commitdiff
Implement file upload
authorJohannes Zellner <johannes@nebulon.de>
Tue, 1 Mar 2016 14:54:16 +0000 (15:54 +0100)
committerJohannes Zellner <johannes@nebulon.de>
Tue, 1 Mar 2016 14:54:16 +0000 (15:54 +0100)
app/index.html
app/js/app.js

index 78f5a948b96f80df8647ef4da150f30597d7f3d3..721ec25175ad8ca46278d2f7d475dce65d512c59 100644 (file)
@@ -63,7 +63,8 @@
         <div class="row">
             <div class="col-lg-12">
                 <center>
-                    <button class="btn btn-primary">Upload</button>
+                    <input type='file' v-el:upload style="display: none"/>
+                    <button class="btn btn-primary" v-on:click="upload()">Upload</button>
                 </center>
                 <br/>
             </div>
index b71a7ede02438cd6d946d75bc1c1ef508bc3888b..e2fe6213b631699040538465a00bfab8f3b316d0 100644 (file)
@@ -39,6 +39,14 @@ function sanitize(filePath) {
     return filePath.replace(/\/+/g, '/');
 }
 
+function encode(filePath) {
+    return filePath.split('/').map(encodeURIComponent).join('/');
+}
+
+function refresh() {
+    loadDirectory(app.path);
+}
+
 function loadDirectory(filePath) {
     app.busy = true;
 
@@ -70,6 +78,29 @@ function up() {
     loadDirectory(app.path.split('/').slice(0, -1).filter(function (p) { return !!p; }).join('/'));
 }
 
+function upload() {
+    $(app.$els.upload).change(function () {
+        app.busy = true;
+
+        var file = app.$els.upload.files[0];
+        var path = encode(sanitize(app.path + '/' + file.name));
+
+        var formData = new FormData();
+        formData.append('file', file);
+
+        superagent.put('/api/files' + path).query({ username: app.session.username, password: app.session.password }).send(formData).end(function (error, result) {
+            app.busy = false;
+
+            if (error) return console.error(error);
+            if (result.statusCode !== 201) return console.error('Error uploading file: ', result.statusCode);
+
+            refresh();
+        });
+    });
+
+    app.$els.upload.click();
+}
+
 var app = new Vue({
     el: '#app',
     data: {
@@ -87,7 +118,8 @@ var app = new Vue({
         logout: logout,
         loadDirectory: loadDirectory,
         open: open,
-        up: up
+        up: up,
+        upload: upload
     }
 });