最近使用了HTTPS协议在Android设备上进行文件上下传操作,这里做一下记录。
一、Android端代码
1.下面的代码是关于文件上传和下载需要使用的工具类。
这个代码是模仿表单的形式提交文件信息。
package com.example.justyoung.logintest;
import android.content.SharedPreferences;
import android.util.Log;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.List;
import java.util.Map;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
/**
* Created by justyoung on 15/6/28.
*/
public class HttpsHelper {
public static final String PREFIX = "--";
public static final String LINE_END = "\r\n";
public static final String BOUNDARY = "*****";
private HttpsURLConnection connection = null;
private StringBuilder response = null;
public void prepareHttpsConnection(String url) throws KeyManagementException, NoSuchAlgorithmException, IOException {
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[]{new MyTrustManager()}, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new MyHostnameVerifier());
connection = (HttpsURLConnection) new URL(url).openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setConnectTimeout(10000);
}
public int uploadFile(String filename) throws IOException {
int result = 0;
if (filename == null)
return result;
connection.setUseCaches(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Charset", "utf-8");
connection.setRequestProperty("Connection", "keep-alive");
connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + BOUNDARY);
DataOutputStream dos = new DataOutputStream(connection.getOutputStream());
dos.writeBytes(PREFIX + BOUNDARY + LINE_END);
dos.writeBytes("Content-Disposition: form-data; " +
"name=\"file1\";filename=\"" +
filename.substring(filename.lastIndexOf("/")) + "\"" + LINE_END);
dos.writeBytes(LINE_END);
int len;
InputStream ins = new FileInputStream(new File(filename));
byte[] buffer = new byte[1024];
while ((len = ins.read(buffer)) != -1) {
dos.write(buffer, 0, len);
}
ins.close();
dos.writeBytes(LINE_END);
dos.writeBytes(PREFIX + BOUNDARY + PREFIX + LINE_END);
dos.close();
int responseCode = connection.getResponseCode();
if (responseCode == 200) {
ins = connection.getInputStream();
int ch;
StringBuffer b = new StringBuffer();
while ((ch = ins.read()) != -1) {
b.append((char) ch);
}
Log.i("bbb", b.toString());
}
return responseCode;
}
/**
*
* @param despath 存储的位置
* @