我必须实现一个通过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();

10-07 19:22
查看更多