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:
		
							parent
							
								
									2a5c19cd01
								
							
						
					
					
						commit
						5f59b980a7
					
				
					 1 changed files with 26 additions and 8 deletions
				
			
		| 
						 | 
					@ -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();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue