Hoi, ik ben met een groep bezig met een website volledig in bash.
Nu moet er alleen ook een bestandupload ding komen.
Als je een bestand upload met een multipart formulier krijg je zo'n layout:
Nu moet dit dus gesplitst worden zonder het plaatje te verknoeien.
Ik heb het zover dat het compleet werkt met plaintext bestanden uploaden.
Maar binary's komen er met fouten uit.
Iemand een idee om dit te maken dat het wel werkt?
Mijn huidige code:
Nu moet er alleen ook een bestandupload ding komen.
Als je een bestand upload met een multipart formulier krijg je zo'n layout:
code:
1
2
3
4
5
6
7
8
9
10
| ------------------------------1234567890 Content-disposition: form-data; name="file" filename="pic.jpg" Content-type: image/jpeg <zut binary van een plaatje> ------------------------------1234567890 Content-disposition: form-data; name="submitknop" Verzenden ------------------------------1234567890-- |
Nu moet dit dus gesplitst worden zonder het plaatje te verknoeien.
Ik heb het zover dat het compleet werkt met plaintext bestanden uploaden.
Maar binary's komen er met fouten uit.
Iemand een idee om dit te maken dat het wel werkt?
Mijn huidige code:
Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
| #!/bin/bash cat > tmp.dat nummer=`cat tmp.dat | head -n 1 | tail -c +30 | head -c -2` mv tmp.dat tmpupload_$nummer dir=upload_$nummer mkdir $dir cd $dir num=0 cat ../tmpupload_$nummer | while read line do if [ `echo $line | grep "$nummer"` ] then num=`expr $num + 1` else echo -n $line >> temp.$num fi done for file in temp.* do head $file -n 1 | cut -d ':' -f 2 | while read line do numvars=`expr $(echo $line | tr ';' '\n' | wc -l) - 1` num=0 echo $line | tr ';' '\n' | while read varval do if [ $varval != form-data ] then val=`echo $varval | cut -d '=' -f 2 | head -c -2` var=`echo $varval | cut -d '=' -f 1` val=${val%%\"} val=${val##\"} if [ $var = 'name' ] then name=$val elif [ $var = 'filename' ] then filename=$val cat $file | tail -n +4 | head -n -1 > tmp_$filename fi fi if [ $num -eq $numvars ] then then if [ $filename ] then echo "\$WWW_$name=$filename" else echo -n "\$WWW_$name=" cat $file | tail -n +3 fi fi num=`expr $num + 1` done done done |