Last change
on this file since 3485 was 3320, checked in by Bruno Cornec, 10 years ago |
- Re-add (thanks git BTW) the 2.2.9 branch which had been destroyed in
the move to 3.0
|
-
Property svn:eol-style
set to
native
|
File size:
1.6 KB
|
Rev | Line | |
---|
[3320] | 1 | POST upload example:
|
---|
| 2 |
|
---|
| 3 | post_upload.htm
|
---|
| 4 | ===============
|
---|
| 5 | <html>
|
---|
| 6 | <body>
|
---|
| 7 | <form action=/cgi-bin/post_upload.cgi method=post enctype=multipart/form-data>
|
---|
| 8 | File to upload: <input type=file name=file1> <input type=submit>
|
---|
| 9 | </form>
|
---|
| 10 |
|
---|
| 11 |
|
---|
| 12 | post_upload.cgi
|
---|
| 13 | ===============
|
---|
| 14 | #!/bin/sh
|
---|
| 15 |
|
---|
| 16 | # POST upload format:
|
---|
| 17 | # -----------------------------29995809218093749221856446032^M
|
---|
| 18 | # Content-Disposition: form-data; name="file1"; filename="..."^M
|
---|
| 19 | # Content-Type: application/octet-stream^M
|
---|
| 20 | # ^M <--------- headers end with empty line
|
---|
| 21 | # file contents
|
---|
| 22 | # file contents
|
---|
| 23 | # file contents
|
---|
| 24 | # ^M <--------- extra empty line
|
---|
| 25 | # -----------------------------29995809218093749221856446032--^M
|
---|
| 26 |
|
---|
| 27 | file=/tmp/$$-$RANDOM
|
---|
| 28 |
|
---|
| 29 | CR=`printf '\r'`
|
---|
| 30 |
|
---|
| 31 | # CGI output must start with at least empty line (or headers)
|
---|
| 32 | printf '\r\n'
|
---|
| 33 |
|
---|
| 34 | IFS="$CR"
|
---|
| 35 | read -r delim_line
|
---|
| 36 | IFS=""
|
---|
| 37 |
|
---|
| 38 | while read -r line; do
|
---|
| 39 | test x"$line" = x"" && break
|
---|
| 40 | test x"$line" = x"$CR" && break
|
---|
| 41 | done
|
---|
| 42 |
|
---|
| 43 | cat >"$file"
|
---|
| 44 |
|
---|
| 45 | # We need to delete the tail of "\r\ndelim_line--\r\n"
|
---|
| 46 | tail_len=$((${#delim_line} + 6))
|
---|
| 47 |
|
---|
| 48 | # Get and check file size
|
---|
| 49 | filesize=`stat -c"%s" "$file"`
|
---|
| 50 | test "$filesize" -lt "$tail_len" && exit 1
|
---|
| 51 |
|
---|
| 52 | # Check that tail is correct
|
---|
| 53 | dd if="$file" skip=$((filesize - tail_len)) bs=1 count=1000 >"$file.tail" 2>/dev/null
|
---|
| 54 | printf "\r\n%s--\r\n" "$delim_line" >"$file.tail.expected"
|
---|
| 55 | if ! diff -q "$file.tail" "$file.tail.expected" >/dev/null; then
|
---|
| 56 | printf "<html>\n<body>\nMalformed file upload"
|
---|
| 57 | exit 1
|
---|
| 58 | fi
|
---|
| 59 | rm "$file.tail"
|
---|
| 60 | rm "$file.tail.expected"
|
---|
| 61 |
|
---|
| 62 | # Truncate the file
|
---|
| 63 | dd of="$file" seek=$((filesize - tail_len)) bs=1 count=0 >/dev/null 2>/dev/null
|
---|
| 64 |
|
---|
| 65 | printf "<html>\n<body>\nFile upload has been accepted"
|
---|
Note:
See
TracBrowser
for help on using the repository browser.