2017-04-05 28 views
1

我要实现的是通过HttpURLConnection的图像或PDF,我的所有数据都存储在SD卡的文件夹中发送的功能,我会得到的名单在某个文件夹中的文件,并通过HttpURLConnection将其发送到服务器。如何通过HttpURLConnection类向服务器发送图片或PDF

我不想使用外部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的所有字节

回答

1

这是我使用的代码:

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();