Support ?filename= to download a blob with a given filename.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4246 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
parent
2fb91fccc0
commit
0d9fac7363
20
core/core.js
20
core/core.js
@ -1,5 +1,6 @@
|
|||||||
import * as auth from './auth.js';
|
|
||||||
import * as app from './app.js';
|
import * as app from './app.js';
|
||||||
|
import * as auth from './auth.js';
|
||||||
|
import * as form from './form.js';
|
||||||
import * as httpd from './httpd.js';
|
import * as httpd from './httpd.js';
|
||||||
|
|
||||||
let gProcessIndex = 0;
|
let gProcessIndex = 0;
|
||||||
@ -629,11 +630,16 @@ async function blobHandler(request, response, blobId, uri) {
|
|||||||
if (uri == "/view") {
|
if (uri == "/view") {
|
||||||
let data;
|
let data;
|
||||||
let match;
|
let match;
|
||||||
|
let query = form.decodeForm(request.query);
|
||||||
|
let headers = {};
|
||||||
|
if (query.filename && query.filename.match(/^[A-Za-z0-9\.-]*$/)) {
|
||||||
|
headers['Content-Disposition'] = `attachment; filename=${query.filename}`;
|
||||||
|
}
|
||||||
if (match = /^\/\~(\w+)\/(\w+)$/.exec(blobId)) {
|
if (match = /^\/\~(\w+)\/(\w+)$/.exec(blobId)) {
|
||||||
let id = await new Database(match[1]).get('path:' + match[2]);
|
let id = await new Database(match[1]).get('path:' + match[2]);
|
||||||
if (id) {
|
if (id) {
|
||||||
if (request.headers['if-none-match'] === '"' + id + '"') {
|
if (request.headers['if-none-match'] === '"' + id + '"') {
|
||||||
response.writeHead(304, {});
|
response.writeHead(304, headers);
|
||||||
response.end();
|
response.end();
|
||||||
} else {
|
} else {
|
||||||
data = await getBlobOrContent(id);
|
data = await getBlobOrContent(id);
|
||||||
@ -641,23 +647,23 @@ async function blobHandler(request, response, blobId, uri) {
|
|||||||
let appObject = JSON.parse(data);
|
let appObject = JSON.parse(data);
|
||||||
data = appObject.files[match[3]];
|
data = appObject.files[match[3]];
|
||||||
}
|
}
|
||||||
sendData(response, data, undefined, {etag: '"' + id + '"'});
|
sendData(response, data, undefined, Object.assign({etag: '"' + id + '"'}, headers));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (request.headers['if-none-match'] === '"' + blobId + '"') {
|
if (request.headers['if-none-match'] === '"' + blobId + '"') {
|
||||||
response.writeHead(304, {});
|
response.writeHead(304, headers);
|
||||||
response.end();
|
response.end();
|
||||||
} else {
|
} else {
|
||||||
sendData(response, data, undefined, {etag: '"' + blobId + '"'});
|
sendData(response, data, undefined, Object.assign({etag: '"' + blobId + '"'}, headers));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (request.headers['if-none-match'] === '"' + blobId + '"') {
|
if (request.headers['if-none-match'] === '"' + blobId + '"') {
|
||||||
response.writeHead(304, {});
|
response.writeHead(304, headers);
|
||||||
response.end();
|
response.end();
|
||||||
} else {
|
} else {
|
||||||
data = await getBlobOrContent(blobId);
|
data = await getBlobOrContent(blobId);
|
||||||
sendData(response, data, undefined, {etag: '"' + blobId + '"'});
|
sendData(response, data, undefined, Object.assign({etag: '"' + blobId + '"'}, headers));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (uri == "/save") {
|
} else if (uri == "/save") {
|
||||||
|
Loading…
Reference in New Issue
Block a user