> I want to be able to submit image files using POST and to save those image
> files from the POSTed input. I am taking steps in this direction, and so I
> gave my form tags a new enctype attribute.

With this modified post.r script and form-upload.r  I can upload  binary
files (jpg, etc)
But this is today work ,  beware ....

Luis Rodriguez Jurado.
==================

#!c:/rebol.exe -cs

REBOL [
TITLE: "form-upload"
FILE: %form-upload.r
DATE: 29-April-2000
]
print "Content-Type: text/html^/^/"
print {
<form METHOD=POST ACTION="post.r"
 enctype="multipart/form-data">
 Enter a description of the file:: <input TYPE=text
 SIZE=50 NAME=text><br>
 Select the file: <input TYPE=file SIZE=15
 NAME=myUpload><br><br><br>
 <input TYPE=submit VALUE="post.r">
</FORM></INPUT>
}



#!c:/rebol.exe -cs
REBOL [
    Title:      "multipart POST"
    Date:       15-Sep-1999
    Version:    1.2
    File:       %POST.r
    Author:     "Andrew Grossman (modified by: Luis Rodriguez J -
.29-April-2000)"
    Email:      [EMAIL PROTECTED]
    Owner:      "REBOL Technologies"

    Purpose:    {
        To decode multipart encoded POST requests, including file uploads.
    }
    Usage:      {
        Call this file in your CGI scriptand do decode-multi with a
        file argument of the directory where uploaded files will go and
        a logic argument to set whether files will be given the field they
were
        uploaded as as a name.  Files are saved and variables are decoded
and
        set.
    }
    Notes:      {
        Fixed problem recognizing EOF.
        Functionality is now rock solid.  Function
        calls won't change, so this is certainly useable.
        See the comment in the decode-multi function if you need mime types.
        Tested with MSIE and Netscape for Mac.
    }
    category: ['web 'cgi 'utility]
]
decode-multi: func [
    file-dir        [file!]     {Directory in which to put uploaded files}
    save-as-field   [logic!]    {save files as field name or uploaded
filename}
    /local str boundary done name file done2 content
][

if equal? system/options/cgi/request-method "POST" [
    either not parse system/options/cgi/content-type
        ["multipart/form-data" skip thru {boundary=} skip some {-}
            copy boundary to end]

        str:   make string! input do decode-cgi str][
        str:    make string! input
        done:   false

        while [not done] [
            name:   make string! ""
            str:    make string! input
            either equal? "" str [done: true] [
                either parse/all str [skip thru {name="} copy name to {"}
                    skip thru {filename="} copy file to {"} skip to end] [
                    str: make string! input
                    if not equal? str "" [str: make string! input]
                    comment {if you need mime put "parse/all str
["Content-Type:"
                        skip copy mime to end]" into the preceding if
block.}
                    done2:      false
                    content:    make string! ""
                    while [not done2] [
   content-length: to-integer system/options/cgi/content-length
   str: make string! content-length
   read-io system/ports/input str content-length
                        either d: find/reverse tail str boundary [
                               e: find/reverse tail copy/part str (index? d)
{^/}
                               content: copy/part str (index? e) - 2
                         done2: true]
                             [
                             append content str
                         ]
                    ]
                    if not none? file

                        either save-as-field [name: dehex name write/binary
                            file-dir/:name content] [
                            file: dehex file write/binary file-dir/:file
content
                        ]
                    ]
                ][
                    parse str [skip thru {name="} copy name to {"}]
                    str: make string! input str: dehex make string! input
                    set to-word name str str: make string! input
                ]

            ]

        ]
    ]
]
]

decode-multi %. true



-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to