Android实现视频文件上传服务器是一个很常见的需求,比如说视频分享社区、在线教育等。本文将介绍如何使用Android实现视频文件上传服务器的功能,以及如何使用相应的代码实现。
技术选型
上传文件到服务器一般使用HttpURLConnection或Apache Http Components这两种方式。其中,Apache Http Components在Android 6.0之后不再被官方支持,所以我们这里使用HttpURLConnection方式实现。
实现方法
1.在AndroidManifest.xml文件中添加以下权限
其中,INTERNET权限是用于访问网络,READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE是用于读写SD卡权限。
2.创建一个上传工具类HttpUtils
public class HttpUtils{
private static final String TAG = "HttpUtils";
public static String post(String url, File file, Map params) {
String BOUNDARY = UUID.randomUUID().toString();
String PREFIX = "--";
String LINE_END = "\r\n";
String CONTENT_TYPE = "multipart/form-data";
try {
URL httpUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
conn.setReadTimeout(10 * 1000);
conn.setConnectTimeout(10 * 1000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("connection", "keep-alive");
conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
StringBuilder sb = new StringBuilder();
if (params != null) {
for (Map.Entry entry : params.entrySet()) {
sb.append(PREFIX).append(BOUNDARY).append(LINE_END);
sb.append("Content-Disposition: form-data; name=\"")
.append(entry.getKey()).append("\"").append(LINE_END);
sb.append("Content-Type: text/plain; charset=UTF-8").append(LINE_END);
sb.append("Content-Transfer-Encoding: 8bit").append(LINE_END);
sb.append(LINE_END);
sb.append(entry.getValue()).append(LINE_END);
}
}
dos.write(sb.toString().getBytes());
if (file != null && file.exists()) {
LOG.i(TAG, "upload file path=" + file.getAbsolutePath());