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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
package com.koushikdutta.async.test;
import android.os.Environment;
import com.koushikdutta.async.AsyncServer;
import com.koushikdutta.async.ByteBufferList;
import com.koushikdutta.async.DataEmitter;
import com.koushikdutta.async.callback.CompletedCallback;
import com.koushikdutta.async.callback.DataCallback;
import com.koushikdutta.async.future.Future;
import com.koushikdutta.async.http.*;
import com.koushikdutta.async.http.AsyncHttpClient.StringCallback;
import com.koushikdutta.async.http.MultipartFormDataBody.MultipartCallback;
import com.koushikdutta.async.http.server.AsyncHttpServer;
import com.koushikdutta.async.http.server.AsyncHttpServerRequest;
import com.koushikdutta.async.http.server.AsyncHttpServerResponse;
import com.koushikdutta.async.http.server.HttpServerRequestCallback;
import junit.framework.TestCase;
import java.io.File;
import java.io.FileOutputStream;
import java.util.concurrent.TimeUnit;
public class MultipartTests extends TestCase {
AsyncHttpServer httpServer;
AsyncServer server;
@Override
protected void setUp() throws Exception {
super.setUp();
server = new AsyncServer();
server.setAutostart(true);
httpServer = new AsyncHttpServer();
httpServer.setErrorCallback(new CompletedCallback() {
@Override
public void onCompleted(Exception ex) {
fail();
}
});
httpServer.listen(server, 5000);
httpServer.post("/", new HttpServerRequestCallback() {
int gotten = 0;
@Override
public void onRequest(final AsyncHttpServerRequest request, final AsyncHttpServerResponse response) {
final MultipartFormDataBody body = (MultipartFormDataBody)request.getBody();
body.setMultipartCallback(new MultipartCallback() {
@Override
public void onPart(Part part) {
if (part.isFile()) {
body.setDataCallback(new DataCallback() {
@Override
public void onDataAvailable(DataEmitter emitter, ByteBufferList bb) {
gotten += bb.remaining();
bb.recycle();
}
});
}
}
});
request.setEndCallback(new CompletedCallback() {
@Override
public void onCompleted(Exception ex) {
response.send(body.getField("baz") + gotten + body.getField("foo"));
}
});
}
});
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
httpServer.stop();
server.stop();
}
public void testUpload() throws Exception {
File dummy = new File(Environment.getExternalStorageDirectory(), "AndroidAsync/dummy.txt");
final String FIELD_VAL = "bar";
dummy.getParentFile().mkdirs();
FileOutputStream fout = new FileOutputStream(dummy);
byte[] zeroes = new byte[100000];
for (int i = 0; i < 10; i++) {
fout.write(zeroes);
}
fout.close();
// StreamUtility.writeFile(dummy, DUMMY_VAL);
AsyncHttpPost post = new AsyncHttpPost("http://localhost:5000");
MultipartFormDataBody body = new MultipartFormDataBody();
body.addStringPart("foo", FIELD_VAL);
body.addFilePart("my-file", dummy);
body.addStringPart("baz", FIELD_VAL);
post.setBody(body);
Future<String> ret = AsyncHttpClient.getDefaultInstance().execute(post, new StringCallback() {
@Override
public void onCompleted(Exception e, AsyncHttpResponse source, String result) {
}
});
String data = ret.get(500000, TimeUnit.MILLISECONDS);
assertEquals(data, FIELD_VAL + (zeroes.length * 10) + FIELD_VAL);
}
}
|