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