forked from sheetjs/sheetjs
		
	
		
			
	
	
		
			79 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | // @deno-types="https://cdn.sheetjs.com/xlsx-latest/package/types/index.d.ts"
 | ||
|  | import { read, utils, set_cptable, version } from 'https://cdn.sheetjs.com/xlsx-latest/package/xlsx.mjs'; | ||
|  | import * as cptable from 'https://cdn.sheetjs.com/xlsx-latest/package/dist/cpexcel.full.mjs'; | ||
|  | set_cptable(cptable); | ||
|  | 
 | ||
|  | import * as Drash from "https://deno.land/x/drash@v2.5.4/mod.ts"; | ||
|  | 
 | ||
|  | 
 | ||
|  | class S2CResource extends Drash.Resource { | ||
|  |   public paths = ["/"]; | ||
|  | 
 | ||
|  |   // see https://github.com/drashland/drash/issues/194
 | ||
|  |   public OPTIONS(request: Drash.Request, response: Drash.Response) { | ||
|  |     const allHttpMethods: string[] = [ "GET", "POST", "PUT", "DELETE" ]; | ||
|  |     response.headers.set("Allow", allHttpMethods.join()); // Use this
 | ||
|  |     response.headers.set("Access-Control-Allow-Methods", allHttpMethods.join()); // or this
 | ||
|  |     response.headers.set("access-control-allow-origin", "*"); | ||
|  |     response.status_code = 204; | ||
|  |     return response; | ||
|  |   } | ||
|  | 
 | ||
|  |   public POST(request: Drash.Request, response: Drash.Response) { | ||
|  |     const file = request.bodyParam<Drash.Types.BodyFile>("file"); | ||
|  |     try { response.headers.set("access-control-allow-origin", "*"); } catch(e) {} | ||
|  |     if (!file) throw new Error("File is required!"); | ||
|  |     var wb = read(file.content, {type: "buffer"}); | ||
|  |     return response.html( utils.sheet_to_html(wb.Sheets[wb.SheetNames[0]])); | ||
|  |   } | ||
|  | 
 | ||
|  |   public GET(request: Drash.Request, response: Drash.Response): void { | ||
|  |     try { response.headers.set("access-control-allow-origin", "*"); } catch(e) {} | ||
|  |     return response.html(`\
 | ||
|  | <!DOCTYPE html> | ||
|  | <html> | ||
|  |   <head> | ||
|  |     <title>SheetJS Spreadsheet to HTML Conversion Service</title> | ||
|  |     <meta charset="utf-8" /> | ||
|  |   </head> | ||
|  |   <body> | ||
|  | <pre><h3><a href="//sheetjs.com/">SheetJS</a> Spreadsheet Conversion Service</h3> | ||
|  | <b>API</b> | ||
|  | 
 | ||
|  | Send a POST request to https://s2c.deno.dev/ with the file in the "file" body parameter:
 | ||
|  | 
 | ||
|  | $ curl -X POST -F"file=@test.xlsx" https://s2c.deno.dev/
 | ||
|  | 
 | ||
|  | The response will be an HTML TABLE generated from the first worksheet. | ||
|  | 
 | ||
|  | <b>Try it out!</b><form action="/" method="post" enctype="multipart/form-data"> | ||
|  | 
 | ||
|  | <input type="file" name="file" /> | ||
|  | 
 | ||
|  | Use the file input element to select a file, then click "Submit" | ||
|  | 
 | ||
|  | <button type="submit">Submit</button> | ||
|  | </form> | ||
|  | 
 | ||
|  | Library Version: ${version} | ||
|  | </pre> | ||
|  |   </body> | ||
|  | </html>`,
 | ||
|  |     ); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | // Create and run your server
 | ||
|  | const server = new Drash.Server({ | ||
|  |   hostname: "", | ||
|  |   port: 3000, | ||
|  |   protocol: "http", | ||
|  |   resources: [ | ||
|  |     S2CResource, | ||
|  |   ], | ||
|  | }); | ||
|  | 
 | ||
|  | server.run(); | ||
|  | 
 | ||
|  | console.log(`Server running at ${server.address}.`); |