You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					54 lines
				
				1.3 KiB
			
		
		
			
		
	
	
					54 lines
				
				1.3 KiB
			| 
											3 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | import AxiosError from '../core/AxiosError.js'; | ||
|  | import parseProtocol from './parseProtocol.js'; | ||
|  | import platform from '../platform/index.js'; | ||
|  | 
 | ||
|  | const DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Parse data uri to a Buffer or Blob | ||
|  |  * | ||
|  |  * @param {String} uri | ||
|  |  * @param {?Boolean} asBlob | ||
|  |  * @param {?Object} options | ||
|  |  * @param {?Function} options.Blob | ||
|  |  * | ||
|  |  * @returns {Buffer|Blob} | ||
|  |  */ | ||
|  | export default function fromDataURI(uri, asBlob, options) { | ||
|  |   const _Blob = options && options.Blob || platform.classes.Blob; | ||
|  |   const protocol = parseProtocol(uri); | ||
|  | 
 | ||
|  |   if (asBlob === undefined && _Blob) { | ||
|  |     asBlob = true; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (protocol === 'data') { | ||
|  |     uri = protocol.length ? uri.slice(protocol.length + 1) : uri; | ||
|  | 
 | ||
|  |     const match = DATA_URL_PATTERN.exec(uri); | ||
|  | 
 | ||
|  |     if (!match) { | ||
|  |       throw new AxiosError('Invalid URL', AxiosError.ERR_INVALID_URL); | ||
|  |     } | ||
|  | 
 | ||
|  |     const mime = match[1]; | ||
|  |     const isBase64 = match[2]; | ||
|  |     const body = match[3]; | ||
|  |     const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8'); | ||
|  | 
 | ||
|  |     if (asBlob) { | ||
|  |       if (!_Blob) { | ||
|  |         throw new AxiosError('Blob is not supported', AxiosError.ERR_NOT_SUPPORT); | ||
|  |       } | ||
|  | 
 | ||
|  |       return new _Blob([buffer], {type: mime}); | ||
|  |     } | ||
|  | 
 | ||
|  |     return buffer; | ||
|  |   } | ||
|  | 
 | ||
|  |   throw new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_NOT_SUPPORT); | ||
|  | } |