examples: add another vweb example, showing file upload, transform, and file download (#14842)
							parent
							
								
									ccc3271493
								
							
						
					
					
						commit
						d336b7b877
					
				|  | @ -0,0 +1,80 @@ | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <html> | ||||||
|  | <head> | ||||||
|  | <meta charset="utf-8" /> | ||||||
|  | <title>Test file uploading data transformation</title> | ||||||
|  | </head> | ||||||
|  | <body> | ||||||
|  | 
 | ||||||
|  | <h2>File Upload and Data Transformation</h2> | ||||||
|  | 
 | ||||||
|  | Upload the <b>sample_input.txt</b> located in this example folder.  | ||||||
|  | <br> | ||||||
|  | <br>  | ||||||
|  | V will apply data transformation, adding the first two columns into a third column, and return the results as a download. <br> | ||||||
|  | <br> | ||||||
|  | 
 | ||||||
|  | For example: | ||||||
|  | <table style="color:blue;"> | ||||||
|  | 	<tr> | ||||||
|  | 	  	<td>10</td> | ||||||
|  | 	  	<td>13</td> | ||||||
|  | 	</tr> | ||||||
|  | 	<tr> | ||||||
|  | 		<td>20</td> | ||||||
|  | 		<td>54</td> | ||||||
|  | 	</tr> | ||||||
|  | 	<tr> | ||||||
|  | 		<td>30</td> | ||||||
|  | 		<td>82</td> | ||||||
|  | 	</tr> | ||||||
|  | 	<tr> | ||||||
|  | 		<td>40</td> | ||||||
|  | 		<td>11</td> | ||||||
|  | 	</tr> | ||||||
|  | 	<tr> | ||||||
|  | 		<td>50</td> | ||||||
|  | 		<td>47</td> | ||||||
|  | 	</tr> | ||||||
|  |   </table> | ||||||
|  | <br> | ||||||
|  | Becomes... | ||||||
|  | <br> | ||||||
|  | <table style="color:blue;"> | ||||||
|  | 	<tr> | ||||||
|  | 	  	<td>10</td> | ||||||
|  | 	  	<td>13</td> | ||||||
|  | 		<td>23</td> | ||||||
|  | 	</tr> | ||||||
|  | 	<tr> | ||||||
|  | 		<td>20</td> | ||||||
|  | 		<td>54</td> | ||||||
|  | 		<td>74</td> | ||||||
|  | 	</tr> | ||||||
|  | 	<tr> | ||||||
|  | 		<td>30</td> | ||||||
|  | 		<td>82</td> | ||||||
|  | 		<td>112</td> | ||||||
|  | 	</tr> | ||||||
|  | 	<tr> | ||||||
|  | 		<td>40</td> | ||||||
|  | 		<td>11</td> | ||||||
|  | 		<td>51</td> | ||||||
|  | 	</tr> | ||||||
|  | 	<tr> | ||||||
|  | 		<td>50</td> | ||||||
|  | 		<td>47</td> | ||||||
|  | 		<td>97</td> | ||||||
|  | 	</tr> | ||||||
|  |   </table> | ||||||
|  | 
 | ||||||
|  | <hr> | ||||||
|  | 
 | ||||||
|  | File form: | ||||||
|  | <form method="POST" enctype="multipart/form-data" action="http://localhost:8082/upload"> | ||||||
|  | 	<input type="file" name="upfile"/> | ||||||
|  | 	<input type="submit" value="Upload & Transform"/> | ||||||
|  | </form> | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
|  | @ -0,0 +1,5 @@ | ||||||
|  | 10	13 | ||||||
|  | 20	54 | ||||||
|  | 30	82 | ||||||
|  | 40	11 | ||||||
|  | 50	47 | ||||||
|  | @ -0,0 +1,2 @@ | ||||||
|  | <meta charset="utf-8"> | ||||||
|  | <a href="/">Back</a> | ||||||
|  | @ -0,0 +1,40 @@ | ||||||
|  | module main | ||||||
|  | 
 | ||||||
|  | import vweb | ||||||
|  | 
 | ||||||
|  | const port = 8082 | ||||||
|  | 
 | ||||||
|  | struct App { | ||||||
|  | 	vweb.Context | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | fn main() { | ||||||
|  | 	vweb.run(&App{}, port) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | pub fn (mut app App) index() vweb.Result { | ||||||
|  | 	return $vweb.html() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ['/upload'; post] | ||||||
|  | pub fn (mut app App) upload() vweb.Result { | ||||||
|  | 	fdata := app.files['upfile'] | ||||||
|  | 
 | ||||||
|  | 	data_rows := fdata[0].data.split('\n') | ||||||
|  | 
 | ||||||
|  | 	mut output_data := '' | ||||||
|  | 
 | ||||||
|  | 	for elem in data_rows { | ||||||
|  | 		delim_row := elem.split('\t') | ||||||
|  | 		output_data += '${delim_row[0]}\t${delim_row[1]}\t${delim_row[0].int() + delim_row[1].int()}\n' | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	output_data = output_data.all_before_last('\n') | ||||||
|  | 
 | ||||||
|  | 	println(output_data) | ||||||
|  | 
 | ||||||
|  | 	app.add_header('Content-Disposition', 'attachment; filename=results.txt') | ||||||
|  | 	app.send_response_to_client('application/octet-stream', output_data) | ||||||
|  | 
 | ||||||
|  | 	return $vweb.html() | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue