forked from sheetjs/sheetjs
		
	- `writeFile` support chrome extension (fixes #1051 h/t @atkinsam) - demo refresh
		
			
				
	
	
		
			41 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
 | |
| /* eslint-env node */
 | |
| // base64 sheetjs.xlsb | curl -F "data=@-;filename=test.xlsb" http://localhost:3000/LambdaProxy
 | |
| 
 | |
| 'use strict';
 | |
| var XLSX = require('xlsx');
 | |
| var Busboy = require('busboy');
 | |
| 
 | |
| exports.handler = function(event, context, callback) {
 | |
| 	/* set up busboy */
 | |
| 	var ctype = event.headers['Content-Type']||event.headers['content-type'];
 | |
| 	var bb = new Busboy({headers:{'content-type':ctype}});
 | |
| 
 | |
| 	/* busboy is evented; accumulate the fields and files manually */
 | |
| 	var fields = {}, files = {};
 | |
| 	bb.on('error', function(err) { console.log('err', err); callback(err); });
 | |
| 	bb.on('field', function(fieldname, val) {fields[fieldname] = val });
 | |
| 	bb.on('file', function(fieldname, file, filename) {
 | |
| 		/* concatenate the individual data buffers */
 | |
| 		var buffers = [];
 | |
| 		file.on('data', function(data) { buffers.push(data); });
 | |
| 		file.on('end', function() { files[fieldname] = [Buffer.concat(buffers), filename]; });
 | |
| 	});
 | |
| 
 | |
| 	/* on the finish event, all of the fields and files are ready */
 | |
| 	bb.on('finish', function() {
 | |
| 		/* grab the first file */
 | |
| 		var f = files[Object.keys(files)[0]];
 | |
| 		if(!f) callback(new Error("Must submit a file for processing!"));
 | |
| 
 | |
| 		/* f[0] is a buffer, convert to string and interpret as Base64 */
 | |
| 		var wb = XLSX.read(f[0].toString(), {type:"base64"});
 | |
| 
 | |
| 		/* grab first worksheet and convert to CSV */
 | |
| 		var ws = wb.Sheets[wb.SheetNames[0]];
 | |
| 		callback(null, { body: XLSX.utils.sheet_to_csv(ws) });
 | |
| 	});
 | |
| 
 | |
| 	bb.end(event.body);
 | |
| };
 |