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

View file

@ -35,21 +35,39 @@ export default async (url: string, user: IUser, folderId: mongodb.ObjectID = nul
// write content at URL to temp file // write content at URL to temp file
await new Promise((res, rej) => { await new Promise((res, rej) => {
const writable = fs.createWriteStream(path); 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; const requestUrl = URL.parse(url).pathname.match(/[^\u0021-\u00ff]/) ? encodeURI(url) : url;
request({
const req = request({
url: requestUrl, url: requestUrl,
proxy: config.proxy, proxy: config.proxy,
timeout: 10 * 1000,
headers: { headers: {
'User-Agent': config.user_agent 'User-Agent': config.user_agent
} }
}) });
.on('error', rej)
.on('end', () => { req.pipe(writable);
req.on('response', response => {
if (response.statusCode !== 200) {
writable.close(); writable.close();
res(); rej(response.statusCode);
}) }
.pipe(writable) });
.on('error', rej);
req.on('error', error => {
writable.close();
rej(error);
});
}); });
const instance = await fetchMeta(); const instance = await fetchMeta();