一、HttpURLConnection上传文件:
(一)、 HttpURLConnection上传文件操作步骤:
1、实例化URL对象。调用URL有参构造方法,参数是一个url地址;
2、调用URL对象的openConnection()方法,创建HttpURLConnection对象;
3、调用HttpURLConnection对象setDoOutput(true)、setDoInput(true)、setRequestMethod("POST");
4、设置Http请求头信息;(Accept、Connection、Accept-Encoding、Cache-Control、Content-Type、User-Agent)
5、调用HttpURLConnection对象的connect()方法,建立与服务器的真实连接;
6、调用HttpURLConnection对象的getOutputStream()方法构建输出流对象;
7、设置三个常用字符串常量:换行、前缀、分界线(NEWLINE、PREFIX、BOUNDARY);
8、获取表单中上传控件之外的控件数据,写入到输出流对象(根据HttpWatch提示的流信息拼凑字符串);
9、获取表单中上传控件的数据,写入到输出流对象(根据HttpWatch提示的流信息拼凑字符串);
10、调用HttpURLConnection对象的getInputStream()方法构建输入流对象;
11、调用HttpURLConnection对象的getResponseCode()获取客户端与服务器端的连接状态码。如果是200,则执行以下操作,否则提示服务器连接异常;
12、将输入流转成字节数组,返回给客户端。
(二)、核心代码:
public class URLConnectionTest {
public static void main(String[] args) {
// 指定表单提交的url地址
String url = "http://localhost:8080/JavaServer2/UploadServlet";
// 将上传控件之外的其他控件的数据信息存入map对象
Map<String, String> map = new HashMap<String, String>();
map.put("username", "test");
map.put("password", "123456");
// 指定要上传到服务器的文件的客户端路径
String filePath = "d:\\a.jpg";
// 获取到要上传的文件的输入流信息,通过ByteArrayOutputStream流转成byte[]
BufferedInputStream bis = null;
byte[] body_data = null;
try {
bis = new BufferedInputStream(new FileInputStream(filePath));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int c = 0;
byte[] buffer = new byte[8 * 1024];
try {
while ((c = bis.read(buffer)) != -1) {
baos.write(buffer, 0, c);
baos.flush();
}
body_data = baos.toByteArray();
baos.close();
} catch (IOException e) {