如何通过 HttpURLConnection 向服务器发送图像或 PDF
How to sent to the server an Image or a PDF via HttpURLConnection
我必须实现一个通过 HttpURLConnection 发送图像或 PDF 的功能,我所有的数据都存储在 SDCard 的一个文件夹中,我会得到某个文件夹中的文件列表,然后通过 HttpURLConnection 发送它到服务器。
我不想使用外部库(只有本机函数),所以最好的方法是什么?
这是我的代码的一部分:
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);
...
}
现在?我怎样才能发送它?
我的想法是:对于文件夹中的每个文件,我 "get" 在 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();
我必须实现一个通过 HttpURLConnection 发送图像或 PDF 的功能,我所有的数据都存储在 SDCard 的一个文件夹中,我会得到某个文件夹中的文件列表,然后通过 HttpURLConnection 发送它到服务器。
我不想使用外部库(只有本机函数),所以最好的方法是什么?
这是我的代码的一部分:
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);
...
}
现在?我怎样才能发送它?
我的想法是:对于文件夹中的每个文件,我 "get" 在 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();