Fix: download file (#3138)

* Fix: url download

* not explicitly close on end

* resolve on stream finish

* remove unnecessary code

* reject on file error
This commit is contained in:
MeiMei 2018-11-06 07:53:03 +09:00 committed by syuilo
parent 2a5c19cd01
commit 5f59b980a7
1 changed files with 26 additions and 8 deletions

View File

@ -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();