Magellan Linux

Annotation of /trunk/mkinitrd-magellan/busybox/networking/httpd_post_upload.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 984 - (hide annotations) (download)
Sun May 30 11:32:42 2010 UTC (14 years ago) by niro
File MIME type: text/plain
File size: 1613 byte(s)
-updated to busybox-1.16.1 and enabled blkid/uuid support in default config
1 niro 816 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 niro 984 CR=`printf '\r'`
30    
31 niro 816 # CGI output must start with at least empty line (or headers)
32     printf '\r\n'
33    
34 niro 984 IFS="$CR"
35 niro 816 read -r delim_line
36 niro 984 IFS=""
37 niro 816
38     while read -r line; do
39 niro 984 test x"$line" = x"" && break
40     test x"$line" = x"$CR" && break
41 niro 816 done
42    
43 niro 984 cat >"$file"
44 niro 816
45 niro 984 # We need to delete the tail of "\r\ndelim_line--\r\n"
46     tail_len=$((${#delim_line} + 6))
47 niro 816
48 niro 984 # Get and check file size
49     filesize=`stat -c"%s" "$file"`
50     test "$filesize" -lt "$tail_len" && exit 1
51 niro 816
52 niro 984 # 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"