The Challenge: To save a posted file to a file system, not using
SUBMIT_STATIC_FILE
. The Problem: Vignette V6 pre-process the form submitted data so that any
<input type="file">
are encoded as an hex string. If you ERROR_TRACE
the variable for the file, you will see a string that looks like 0x1D00ABADD1D9...
.The Solution:
binary format
to the rescue. and with a bit of trimming, you get it all in a few lines:
proc save_files { } {
#FileData,FileExtention,Field1 are posted from the <form>
set filename [generate_filename]
set bin_filename "${filename}.[SHOW FileExtention]"
set xml_filename "${filename}.xml"
### This will save a binary file.
set file [open $bin_filename "w"]
fconfigure $file -translation binary
puts -nonewline $file [binary format H* [string range [SHOW FileData] 2 end-1]]
close $file
### This will save a utf-8 xml (text) file
set file [open $xml_filename "w"]
fconfigure $file -encoding "utf-8"
puts $file "<?xml version='1.0' encoding='utf-8' ?>"
puts $file "<formdata>"
puts $file "<Field1>[HTML_ESCAPE [SHOW Field1]]</Field1>"
#...more fields...
$puts $file "<Attachment>$bin_filename</Attachment>"
puts $file "</formdata>"
close $file
}
* Remember to use
H*
and not h*
.* The example above also saves a text file in utf-8 with extra data from the form
* Make sure your form is
enctype=multipart/form-data
* This will not work in Storyserver 4.2.
No comments:
Post a Comment
[Due to much spam, comments are now moderated and will be posted after review]
Note: Only a member of this blog may post a comment.