View difference between Paste ID: VrMNuxcv and
SHOW:
|
|
- or go back to the newest paste.
1 | - | |
1 | + | package uk.ac.ic.doc.markitanis.learning; |
2 | ||
3 | import java.io.DataOutputStream; | |
4 | import java.io.FileInputStream; | |
5 | import java.io.IOException; | |
6 | import java.io.InputStream; | |
7 | import java.net.HttpURLConnection; | |
8 | import java.net.MalformedURLException; | |
9 | import java.net.URL; | |
10 | ||
11 | import org.apache.commons.codec.binary.Base64; | |
12 | ||
13 | import android.util.Log; | |
14 | ||
15 | public class HttpFileUploader { | |
16 | ||
17 | private URL connectURL; | |
18 | ||
19 | private String responseString; | |
20 | ||
21 | private String fileName; | |
22 | ||
23 | private FileInputStream fileInputStream = null; | |
24 | ||
25 | private final String lineEnd = "\r\n"; | |
26 | ||
27 | private final String twoHyphens = "--"; | |
28 | ||
29 | private final String boundary = "*****"; | |
30 | ||
31 | private String parameters; | |
32 | ||
33 | private final String TAG = Constants.HTTP_FILE_UPLOADER; | |
34 | ||
35 | public HttpFileUploader(String urlString, String fileName, String parameters) throws MalformedURLException{ | |
36 | ||
37 | connectURL = new URL(urlString); | |
38 | ||
39 | this.fileName = fileName; | |
40 | ||
41 | this.parameters = parameters; | |
42 | ||
43 | } | |
44 | ||
45 | ||
46 | public boolean doStart(FileInputStream stream){ | |
47 | ||
48 | fileInputStream = stream; | |
49 | ||
50 | return upload(); | |
51 | } | |
52 | ||
53 | ||
54 | private boolean upload(){ | |
55 | ||
56 | boolean success = false; | |
57 | ||
58 | try | |
59 | { | |
60 | //------------------ CLIENT REQUEST | |
61 | Log.i(TAG, "About to upload database..."); | |
62 | ||
63 | // Open a HTTP connection to the URL | |
64 | HttpURLConnection conn = (HttpURLConnection) connectURL.openConnection(); | |
65 | ||
66 | // Allow Inputs | |
67 | conn.setDoInput(true); | |
68 | ||
69 | // Allow Outputs | |
70 | conn.setDoOutput(true); | |
71 | ||
72 | // Don't use a cached copy. | |
73 | conn.setUseCaches(false); | |
74 | ||
75 | // Use a post method. | |
76 | conn.setRequestMethod("POST"); | |
77 | ||
78 | conn.setRequestProperty("Connection", "Keep-Alive"); | |
79 | ||
80 | conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary); | |
81 | ||
82 | // stuff the Authorization request header | |
83 | byte[] encodedPassword = ( "************" + ":" + "***********" ).getBytes(); | |
84 | ||
85 | String encoded = new String(Base64.encodeBase64(encodedPassword)); | |
86 | ||
87 | conn.setRequestProperty( "Authorization", "Basic " + encoded); | |
88 | ||
89 | DataOutputStream dos = new DataOutputStream( conn.getOutputStream() ); | |
90 | ||
91 | dos.writeBytes(twoHyphens + boundary + lineEnd); | |
92 | ||
93 | dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + this.fileName+"\"" + lineEnd); | |
94 | ||
95 | //TODO: | |
96 | //dos.writeBytes(this.parameters); | |
97 | ||
98 | dos.writeBytes(lineEnd); | |
99 | ||
100 | Log.i(TAG ,"Headers have been written"); | |
101 | ||
102 | // create a buffer of maximum size | |
103 | int bytesAvailable = fileInputStream.available(); | |
104 | ||
105 | int maxBufferSize = 1024; | |
106 | ||
107 | int bufferSize = Math.min(bytesAvailable, maxBufferSize); | |
108 | ||
109 | byte[] buffer = new byte[bufferSize]; | |
110 | ||
111 | // read file and write it into form... | |
112 | int bytesRead = fileInputStream.read(buffer, 0, bufferSize); | |
113 | ||
114 | while (bytesRead > 0) | |
115 | { | |
116 | dos.write(buffer, 0, bufferSize); | |
117 | ||
118 | bytesAvailable = fileInputStream.available(); | |
119 | ||
120 | bufferSize = Math.min(bytesAvailable, maxBufferSize); | |
121 | ||
122 | bytesRead = fileInputStream.read(buffer, 0, bufferSize); | |
123 | } | |
124 | ||
125 | // send multipart form data necesssary after file data... | |
126 | dos.writeBytes(lineEnd); | |
127 | ||
128 | dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); | |
129 | ||
130 | // close streams | |
131 | ||
132 | Log.i(TAG ,"Database file with name " + this.fileName + " has been successfully written"); | |
133 | ||
134 | fileInputStream.close(); | |
135 | ||
136 | dos.flush(); | |
137 | ||
138 | InputStream is = conn.getInputStream(); | |
139 | ||
140 | // retrieve the response from server | |
141 | ||
142 | int ch; | |
143 | ||
144 | StringBuffer b = new StringBuffer(); | |
145 | ||
146 | while( ( ch = is.read() ) != -1 ){ | |
147 | b.append( (char)ch ); | |
148 | } | |
149 | ||
150 | this.responseString = b.toString(); | |
151 | ||
152 | if (responseString.equals("success")) { | |
153 | ||
154 | success = true; | |
155 | ||
156 | }else if (responseString.equals("error")) { | |
157 | success = false; | |
158 | } | |
159 | ||
160 | Log.i(TAG, "Response String from server:"+responseString); | |
161 | ||
162 | dos.close(); | |
163 | ||
164 | } | |
165 | catch (MalformedURLException ex) | |
166 | { | |
167 | Log.e(TAG , "error: " + ex.getMessage()); | |
168 | ||
169 | } | |
170 | ||
171 | catch (IOException ioe) | |
172 | { | |
173 | Log.e(TAG , "error: " + ioe.getMessage()); | |
174 | ||
175 | } | |
176 | ||
177 | return success; | |
178 | } | |
179 | ||
180 | ||
181 | public String getResponse() { | |
182 | ||
183 | return this.responseString; | |
184 | ||
185 | } | |
186 | ||
187 | ||
188 | } |