Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

finally! (multipart/form-data)

 [1/3] from: ryan::christiansen::intellisol::com at: 30-Apr-2001 17:59


I finally created a routine which will parse multipart/form-data. I ran into trouble trying to figure out how to keep the image portion of the POST data binary, but I got it to work in the end. Go to this web page to see it in action... http://www.fargonews.com/post-data.html Here is the code... #!rebol -cs REBOL [] print "Content-Type: text/html^/" ;-- Required Page Header content-length: 20 + load system/options/cgi/content-length post-data: make string! content-length read-io system/ports/input post-data content-length post-data: make binary! post-data cd-block: [] parse/all post-data [ any [to "Content-Disposition:" copy text to "------" (text: make binary! text append cd-block text)] ] cd-input: [] foreach cd cd-block [ either find cd "filename" [ parse/all cd [thru {name="} copy text to {"} (append cd-input text)] parse/all cd [thru {filename="} copy text to {"} (file-path-string: copy text)] file-path-block: parse/all file-path-string {\/"} filename: last file-path-block parse/all cd [thru {Content-Type: } copy text to {^/} (file-mime-type: copy text)] parse/all cd [thru {^M^/^M^/} copy text to {^M^/} (text: make binary! text append cd-input text)] ][ parse/all cd [thru {name="} copy text to {"} (append cd-input text)] parse/all cd [thru {^M^/^M^/} copy text to {^M^/} (append cd-input text)] ] ] cd-input: head cd-input object-data: make object! [] for x 1 (length? cd-input) 2 [ variable: first cd-input cd-input: next cd-input value: first cd-input either binary? value [ make-object-data: reform [rejoin [{object-data: make object-data [} (variable) {: } (value) {]}]] ][ make-object-data: reform [rejoin [{object-data: make object-data [} (variable) {: ^{} (value) {^}]}]] ] do make-object-data cd-input: next cd-input ] make-object-data: reform [rejoin [{object-data: make object-data [filename: ^{} (filename) {^}]}]] do make-object-data make-object-data: reform [rejoin [{object-data: make object-data [file-mime-type: ^{} (file-mime-type) {^}]}]] do make-object-data image-name: make file! (rejoin [{../images/} object-data/filename]) write/binary image-name object-data/file wait 4 print rejoin [{<IMG SRC="} image-name {">}] Ryan C. Christiansen Web Developer Intellisol International 4733 Amber Valley Parkway Fargo, ND 58104 701-235-3390 ext. 6671 FAX: 701-235-9940 http://www.intellisol.com Global Leader in People Performance Software _____________________________________ Confidentiality Notice This message may contain privileged and confidential information. If you think, for any reason, that this message may have been addressed to you in error, you must not disseminate, copy or take any action in reliance on it, and we would ask you to notify us immediately by return email to [ryan--christiansen--intellisol--com]

 [2/3] from: ryan:christiansen:intellisol at: 30-Apr-2001 18:09


I discovered that my routine doesn't always parse the filename correctly all of the time. I will need to fix that bit of parsing. Other than that, it seems to work fine. Ryan C. Christiansen Web Developer Intellisol International 4733 Amber Valley Parkway Fargo, ND 58104 701-235-3390 ext. 6671 FAX: 701-235-9940 http://www.intellisol.com Global Leader in People Performance Software _____________________________________ Confidentiality Notice This message may contain privileged and confidential information. If you think, for any reason, that this message may have been addressed to you in error, you must not disseminate, copy or take any action in reliance on it, and we would ask you to notify us immediately by return email to [ryan--christiansen--intellisol--com] [ryan--christiansen--inte] llisol.com To: [rebol-list--rebol--com] Sent by: cc: [rebol-bounce--rebol--com] Subject: [REBOL] finally! (multipart/form-data) 04/30/2001 05:59 PM Please respond to rebol-list I finally created a routine which will parse multipart/form-data. I ran into trouble trying to figure out how to keep the image portion of the POST data binary, but I got it to work in the end. Go to this web page to see it in action... http://www.fargonews.com/post-data.html Here is the code... #!rebol -cs REBOL [] print "Content-Type: text/html^/" ;-- Required Page Header content-length: 20 + load system/options/cgi/content-length post-data: make string! content-length read-io system/ports/input post-data content-length post-data: make binary! post-data cd-block: [] parse/all post-data [ any [to "Content-Disposition:" copy text to "------" (text: make binary! text append cd-block text)] ] cd-input: [] foreach cd cd-block [ either find cd "filename" [ parse/all cd [thru {name="} copy text to {"} (append cd-input text)] parse/all cd [thru {filename="} copy text to {"} (file-path-string: copy text)] file-path-block: parse/all file-path-string {\/"} filename: last file-path-block parse/all cd [thru {Content-Type: } copy text to {^/} (file-mime-type: copy text)] parse/all cd [thru {^M^/^M^/} copy text to {^M^/} (text: make binary! text append cd-input text)] ][ parse/all cd [thru {name="} copy text to {"} (append cd-input text)] parse/all cd [thru {^M^/^M^/} copy text to {^M^/} (append cd-input text)] ] ] cd-input: head cd-input object-data: make object! [] for x 1 (length? cd-input) 2 [ variable: first cd-input cd-input: next cd-input value: first cd-input either binary? value [ make-object-data: reform [rejoin [{object-data: make object-data [} (variable) {: } (value) {]}]] ][ make-object-data: reform [rejoin [{object-data: make object-data [} (variable) {: ^{} (value) {^}]}]] ] do make-object-data cd-input: next cd-input ] make-object-data: reform [rejoin [{object-data: make object-data [filename: ^{} (filename) {^}]}]] do make-object-data make-object-data: reform [rejoin [{object-data: make object-data [file-mime-type: ^{} (file-mime-type) {^}]}]] do make-object-data image-name: make file! (rejoin [{../images/} object-data/filename]) write/binary image-name object-data/file wait 4 print rejoin [{<IMG SRC="} image-name {">}] Ryan C. Christiansen Web Developer Intellisol International 4733 Amber Valley Parkway Fargo, ND 58104 701-235-3390 ext. 6671 FAX: 701-235-9940 http://www.intellisol.com Global Leader in People Performance Software _____________________________________ Confidentiality Notice This message may contain privileged and confidential information. If you think, for any reason, that this message may have been addressed to you in error, you must not disseminate, copy or take any action in reliance on it, and we would ask you to notify us immediately by return email to [ryan--christiansen--intellisol--com]

 [3/3] from: dmurrill:mindspring at: 1-May-2001 14:35


Really cool stuff Ryan, i'm still learning Rebol buti can follow every bit of your script. It seems that this is what Rebol should be doing. ----- Original Message ----- I finally created a routine which will parse multipart/form-data. I ran into trouble trying to figure out how to keep the image portion of the POST data binary, but I got it to work in the end. Go to this web page to see it in action... http://www.fargonews.com/post-data.html Here is the code...