Mercurial Hosting > luan
annotate core/src/luan/modules/url/MultipartClient.java @ 726:14f136a4641f
use enctype for multipart/form-data
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 09 Jun 2016 18:43:32 -0600 |
parents | a741a3a33423 |
children |
rev | line source |
---|---|
725
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1 package luan.modules.url; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
2 |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
3 import java.io.OutputStream; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
4 import java.io.IOException; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
5 import java.net.HttpURLConnection; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
6 import java.util.List; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
7 import java.util.ArrayList; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
8 import java.util.Map; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
9 import java.util.HashMap; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
10 import luan.LuanTable; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
11 import luan.LuanException; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
12 |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
13 |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
14 public final class MultipartClient { |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
15 private static final byte[] __CRLF = {'\r','\n'}; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
16 private static final byte[] __DASHDASH = {'-','-'}; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
17 private static final String __ISO_8859_1 = "ISO-8859-1"; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
18 |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
19 private final Map params = new HashMap(); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
20 |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
21 MultipartClient(Map params) throws LuanException { |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
22 for( Object hack : params.entrySet() ) { |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
23 Map.Entry entry = (Map.Entry)hack; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
24 String key = (String)entry.getKey(); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
25 Object val = entry.getValue(); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
26 List list = new ArrayList(); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
27 if( val instanceof String ) { |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
28 list.add(val); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
29 } else { |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
30 if( !(val instanceof LuanTable) ) |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
31 throw new LuanException( "parameter '"+key+"' must be string or table" ); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
32 LuanTable t = (LuanTable)val; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
33 if( !t.isList() ) |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
34 throw new LuanException( "parameter '"+key+"' table must be list" ); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
35 for( Object obj : t.asList() ) { |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
36 if( !(obj instanceof String) ) |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
37 throw new LuanException( "parameter '"+key+"' values must be strings" ); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
38 list.add(obj); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
39 } |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
40 } |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
41 this.params.put(key,list); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
42 } |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
43 } |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
44 |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
45 public OutputStream write(HttpURLConnection httpCon) throws IOException { |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
46 String boundary = "luan" + System.identityHashCode(this) + Long.toString(System.currentTimeMillis(),36); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
47 byte[] boundaryBytes = boundary.getBytes(__ISO_8859_1); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
48 |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
49 httpCon.setRequestProperty("Content-Type","multipart/form-data; boundary="+boundary); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
50 OutputStream out = httpCon.getOutputStream(); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
51 for( Object hack : params.entrySet() ) { |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
52 Map.Entry entry = (Map.Entry)hack; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
53 String name = (String)entry.getKey(); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
54 List list = (List)entry.getValue(); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
55 for( Object obj : list ) { |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
56 String val = (String)obj; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
57 out.write(__DASHDASH); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
58 out.write(boundaryBytes); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
59 out.write(__CRLF); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
60 out.write(("Content-Disposition: form-data; name=\""+name+"\"").getBytes(__ISO_8859_1)); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
61 out.write(__CRLF); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
62 out.write(__CRLF); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
63 out.write(val.getBytes()); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
64 out.write(__CRLF); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
65 } |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
66 } |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
67 out.write(__DASHDASH); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
68 out.write(boundaryBytes); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
69 out.write(__DASHDASH); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
70 out.write(__CRLF); |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
71 return out; |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
72 } |
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
73 } |