diff --git a/examples/vweb/file_transform/index.html b/examples/vweb/file_transform/index.html
new file mode 100644
index 0000000000..1a36016d9e
--- /dev/null
+++ b/examples/vweb/file_transform/index.html
@@ -0,0 +1,80 @@
+
+
+
+
+Test file uploading data transformation
+
+
+
+File Upload and Data Transformation
+
+Upload the sample_input.txt located in this example folder.
+
+
+V will apply data transformation, adding the first two columns into a third column, and return the results as a download.
+
+
+For example:
+
+
+ 10 |
+ 13 |
+
+
+ 20 |
+ 54 |
+
+
+ 30 |
+ 82 |
+
+
+ 40 |
+ 11 |
+
+
+ 50 |
+ 47 |
+
+
+
+Becomes...
+
+
+
+ 10 |
+ 13 |
+ 23 |
+
+
+ 20 |
+ 54 |
+ 74 |
+
+
+ 30 |
+ 82 |
+ 112 |
+
+
+ 40 |
+ 11 |
+ 51 |
+
+
+ 50 |
+ 47 |
+ 97 |
+
+
+
+
+
+File form:
+
+
+
+
diff --git a/examples/vweb/file_transform/sample_input.txt b/examples/vweb/file_transform/sample_input.txt
new file mode 100644
index 0000000000..030d5f622e
--- /dev/null
+++ b/examples/vweb/file_transform/sample_input.txt
@@ -0,0 +1,5 @@
+10 13
+20 54
+30 82
+40 11
+50 47
\ No newline at end of file
diff --git a/examples/vweb/file_transform/upload.html b/examples/vweb/file_transform/upload.html
new file mode 100644
index 0000000000..8e0595554b
--- /dev/null
+++ b/examples/vweb/file_transform/upload.html
@@ -0,0 +1,2 @@
+
+Back
diff --git a/examples/vweb/file_transform/vweb_example.v b/examples/vweb/file_transform/vweb_example.v
new file mode 100644
index 0000000000..0629235371
--- /dev/null
+++ b/examples/vweb/file_transform/vweb_example.v
@@ -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()
+}