forked from sheetjs/sheetjs
		
	
		
			
	
	
		
			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); | ||
|  | }; |