summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2018-11-06 07:53:03 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2018-11-06 07:53:03 +0900
commit5f59b980a753f1bd0418747cb76263dddd5dbb20 (patch)
tree7e6ebb11029feaaca0b30d14fabb9465e2d62880 /src
parentリモートのファイルをキャッシュするかどうかの設定をDB... (diff)
downloadsharkey-5f59b980a753f1bd0418747cb76263dddd5dbb20.tar.gz
sharkey-5f59b980a753f1bd0418747cb76263dddd5dbb20.tar.bz2
sharkey-5f59b980a753f1bd0418747cb76263dddd5dbb20.zip
Fix: download file (#3138)
* Fix: url download * not explicitly close on end * resolve on stream finish * remove unnecessary code * reject on file error
Diffstat (limited to 'src')
-rw-r--r--src/services/drive/upload-from-url.ts34
1 files changed, 26 insertions, 8 deletions
diff --git a/src/services/drive/upload-from-url.ts b/src/services/drive/upload-from-url.ts
index 7d4785be03..96e258c98b 100644
--- a/src/services/drive/upload-from-url.ts
+++ b/src/services/drive/upload-from-url.ts
@@ -35,21 +35,39 @@ export default async (url: string, user: IUser, folderId: mongodb.ObjectID = nul
// write content at URL to temp file
await new Promise((res, rej) => {
const writable = fs.createWriteStream(path);
+
+ writable.on('finish', () => {
+ res();
+ });
+
+ writable.on('error', error => {
+ rej(error);
+ });
+
const requestUrl = URL.parse(url).pathname.match(/[^\u0021-\u00ff]/) ? encodeURI(url) : url;
- request({
+
+ const req = request({
url: requestUrl,
proxy: config.proxy,
+ timeout: 10 * 1000,
headers: {
'User-Agent': config.user_agent
}
- })
- .on('error', rej)
- .on('end', () => {
+ });
+
+ req.pipe(writable);
+
+ req.on('response', response => {
+ if (response.statusCode !== 200) {
writable.close();
- res();
- })
- .pipe(writable)
- .on('error', rej);
+ rej(response.statusCode);
+ }
+ });
+
+ req.on('error', error => {
+ writable.close();
+ rej(error);
+ });
});
const instance = await fetchMeta();