HttpURLConnection上传文件及服务器端接收

本文详细介绍使用HttpURLConnection上传文件的步骤,包括实例化URL、设置请求方法、构建输入输出流等关键操作。同时,提供服务器端通过Servlet接收并保存上传文件的示例代码,涵盖表单配置、文件解析与存储过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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) {
                        
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值