Skip to content

Commit 5d1abcb

Browse files
expanding on signed URLs and download code
1 parent 724cb62 commit 5d1abcb

3 files changed

Lines changed: 45 additions & 7 deletions

File tree

README.MD

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,9 @@ Firebase approach to uploads: https://firebase.google.com/docs/storage/web/uploa
3232
Pub/Sub: https://github.com/googleapis/nodejs-pubsub/
3333

3434

35-
## Questions
36-
- How will client be informed of workerised file upload failure? Web Socket?
37-
- How do we provide information on file before it has been fully uploaded to the server?
38-
- How to verify correct filetype?
35+
## TODO
36+
- Filetype verification
37+
- Partitioned file uploads
3938

4039

4140
## Architecture

experiments/gcp/upload.js

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,49 @@ function uploadByURL(url, bucket, fileName) {
1717
request(url)
1818
.on('response', (response) => { response.pause(); resolve(response); })
1919
.on('error', (reject));
20-
}).then((response) => { return response.pipe(file.createWriteStream({ gzip: true })); })
20+
//.on('finish', ());
21+
}).then((response) => { return response.pipe(file.createWriteStream({ gzip: true })); }) // TODO: Restructure.
2122
.catch((error) => { return { error }; }); // TODO: Add more detailed error handling. - statusCode etc.
2223
}
24+
// TODO: file.createResumableUpload
2325

2426
exports.upload = function (url, fileName) {
2527
return uploadByURL(url, storage.bucket(config.bucket_name), fileName);
2628
};
29+
30+
function downloadByID(fileName, bucket) {
31+
let file = bucket.file(fileName);
32+
return new Promise((resolve, reject) => {
33+
file.createReadStream()
34+
.on('response', (response) => { response.pause(); resolve(response); })
35+
.on('error', (reject))
36+
.pipe(); // localCache
37+
})
38+
.catch((error) => { return { error }; }); // TODO: Add more detailed error handling. - statusCode etc.
39+
}
40+
41+
exports.download = function (id) {
42+
return downloadByID(id, storage.bucket(config.bucket_name));
43+
};
44+
45+
46+
/**
47+
* Returns a Signed URL to access the uploaded file
48+
* TODO: set expiry date to match the bucket's expiry rules for files
49+
*/
50+
function getURL(fileName, bucket) {
51+
let file = bucket.file(fileName);
52+
file.getSignedUrl({action:'read', expires:'01-01-2020'}, function(err, url) {
53+
if (err) {
54+
console.error(err);
55+
return;
56+
}
57+
return url;
58+
});
59+
}
60+
61+
62+
63+
exports.get = function (fileName) {
64+
return getURL(fileName, storage.bucket(config.bucket_name));
65+
};

index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ function uploadByURL(url, bucket, fileName) {
4242
request(url)
4343
.on('response', (response) => { response.pause(); resolve(response); }) // Create, then pause and return the stream
4444
.on('error', (reject));
45-
})
46-
.then((response) => { return response.pipe(file.createWriteStream({ gzip: true })); })
45+
}).then((response) => { return response.pipe(file.createWriteStream({ gzip: true })); })
4746
.catch((error) => { return { error }; }); // TODO: Add more detailed error handling. - statusCode etc.
4847
}
4948

@@ -56,6 +55,7 @@ function upload(url, fileName) {
5655
* TODO: refactor to adapt based on content-type
5756
*/
5857
function getImage(req, res) {
58+
5959
res.status(200).send();
6060
}
6161

0 commit comments

Comments
 (0)