我必须实现一个通过HttpURLConnection发送图像或PDF的功能,我所有的数据都存储在SDCard的文件夹中,我将获得某个文件夹中文件的列表,然后通过HttpURLConnection将其发送到服务器。
我不想使用外部libray(仅本机功能),所以这样做是最好的方法?
这是我的代码的一部分:
File dataToSendDir = new File(Environment.getExternalStorageDirectory(), SENDATA_FOLDER);
File[] listOfFiles = dataToSendDir.listFiles();
for (File listOfFile : listOfFiles) {
URL url = new URL("MY URL");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setConnectTimeout(2000);
File file = new File(listOfFile.getAbsolutePath());
InputStream inputStream = new FileInputStream(file);
byte[] bytes = new byte[4096];
inputStream.read(bytes);
...
}
现在呢?我该如何发送?
我的想法是:对于文件夹中的每个文件,我“获取”所有字节,包括HttpURLConnection中的所有字节
最佳答案
这是我使用的代码:
URL url = new URL("YOUR ULR");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setConnectTimeout(6000);
HashMap<String, String> params = new HashMap<>();
params.put("PARAMS", dataToSend);
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
boolean first = true;
StringBuilder result = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
writer.write(result.toString());
writer.flush();
writer.close();
os.close();
StringBuilder serverResponse = new StringBuilder();
InputStream is = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String inputLine;
while ((inputLine = br.readLine()) != null) {
serverResponse.append(inputLine);
}
response = serverResponse.toString();