jdk原生实现http的文件和参数同时上传

多种方式实现(jdk原生api实现/httpClient的实现) java 发送http(post/get)请求并携带参数(讲解超详细) 方式1:jdk原生api实现   这种方式的实现无需导入第三方jar包 代码如下 ,复制下来根据自己的需要修改url和参数就行了,可以直接用,亲测有效 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; 阅读详情
protected class UploadFileThread extends java.lang.Thread {
    private final java.util.Map<String, String> parameterMap;
    private final java.util.Map<String, String> fileMap;

    public UploadFileThread(Map<String, String> parameterMap, Map<String, String> fileMap) {
        this.parameterMap = parameterMap;
        this.fileMap = fileMap;
    }

    @Override
    public void run() {
        super.run();
        android.util.Log.d("debug", "开始执行url->" + MHttpUrl.UPLOAD_EXCEL);
        java.net.HttpURLConnection httpURLConnection = null;
        java.io.OutputStream outputStream = null;
        java.io.BufferedReader bufferedReader = null;
        String BOUNDARY = "------------------------123821742118717";
        try {
            java.net.URL url = new java.net.URL(MHttpUrl.UPLOAD_EXCEL);
            java.net.URLConnection urlConnection = url.openConnection();
            httpURLConnection = (java.net.HttpURLConnection) urlConnection;
            httpURLConnection.setConnectTimeout(10000);
            httpURLConnection.setReadTimeout(600000);
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setDoInput(true);
            httpURLConnection.setUseCaches(false);
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
            httpURLConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
            httpURLConnection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
            outputStream = new java.io.DataOutputStream(httpURLConnection.getOutputStream());
            if (parameterMap != null) {
                java.util.Set<java.util.Map.Entry<String, String>> entrySet = parameterMap.entrySet();
                java.util.Iterator<java.util.Map.Entry<String, String>> entryIterator = entrySet.iterator();
                java.lang.StringBuilder stringBuilder = new StringBuilder();
                while (entryIterator.hasNext()) {
                    java.util.Map.Entry<String, String> stringStringEntry = entryIterator.next();
                    String key = stringStringEntry.getKey();
                    String value = stringStringEntry.getValue();
                    if (value == null) {
                        continue;
                    }
                    stringBuilder.append("\r\n");
                    stringBuilder.append("--");
                    stringBuilder.append(BOUNDARY);
                    stringBuilder.append("\r\n");
                    stringBuilder.append("Content-Disposition: form-data; name=\"");
                    stringBuilder.append(key);
                    stringBuilder.append("\"\r\n\r\n");
                    stringBuilder.append(value);
                    android.util.Log.d("debug", "打印参数http分割信息->" + stringBuilder.toString());
                }
                outputStream.write(stringBuilder.toString().getBytes());
            }
            if (fileMap != null) {
                java.util.Set<java.util.Map.Entry<String, String>> entrySet = fileMap.entrySet();
                java.util.Iterator<java.util.Map.Entry<String, String>> entryIterator = entrySet.iterator();
                while (entryIterator.hasNext()) {
                    java.util.Map.Entry<String, String> stringStringEntry = entryIterator.next();
                    String key = stringStringEntry.getKey();;
                    String value = stringStringEntry.getValue();
                    if (value == null) {
                        continue;
                    }
                    java.io.File file = new java.io.File(value);
                    String fileName = file.getName();
                    String contentType = "text/plain";
                    java.lang.String string = "";
                    string = string + "\r\n";
                    string = string + "--";
                    string = string + BOUNDARY;
                    string = string + "\r\n";
                    string = string + "Content-Disposition: form-data; name=\"";
                    string = string + key;
                    string = string + "\"; filename=\"";
                    string = string + fileName;
                    string = string + "\"\r\n";
                    string = string + "Content-Type:";
                    string = string + contentType;
                    string = string + "\r\n\r\n";
                    android.util.Log.d("debug", "打印文件http分割信息->" + string);
                    outputStream.write(string.getBytes());
                    java.io.DataInputStream dataInputStream = new java.io.DataInputStream(new java.io.FileInputStream(file));
                    int bytes = 0;
                    byte[] bufferOut = new byte[1024];
                    while ((bytes = dataInputStream.read(bufferOut)) != -1) {
                        outputStream.write(bufferOut, 0, bytes);
                    }
                    dataInputStream.close();
                }
            }
            String endString = "\r\n--" + BOUNDARY + "--\r\n";
            byte[] endData = endString.getBytes();
            outputStream.write(endData);
            outputStream.flush();
            outputStream.close();
            int responseCode = httpURLConnection.getResponseCode();
            if (responseCode == 200) {
                java.io.InputStream inputStream = httpURLConnection.getInputStream();
                java.io.InputStreamReader inputStreamReader = new java.io.InputStreamReader(inputStream);
                bufferedReader = new java.io.BufferedReader(inputStreamReader);
                java.lang.StringBuilder stringBuilder = new java.lang.StringBuilder();
                String line = null;
                while ((line = bufferedReader.readLine()) != null) {
                    stringBuilder.append(line);
                }
                android.util.Log.d("debug", "打印返回的数据->" + stringBuilder.toString());
                android.os.Message message = myHandler.obtainMessage();
                message.what = 0;
                message.obj = stringBuilder.toString();
                boolean sendResult = myHandler.sendMessage(message);
            } else {
                android.os.Message message = myHandler.obtainMessage();
                message.what = responseCode;
                message.obj = String.valueOf(responseCode);
                boolean sendResult = myHandler.sendMessage(message);
            }
        } catch (java.io.IOException e) {
            e.printStackTrace();
            android.os.Message message = myHandler.obtainMessage();
            message.what = -1;
            message.obj = e.getMessage();
            boolean sendResult = myHandler.sendMessage(message);
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (java.io.IOException e) {
                    e.printStackTrace();
                }
            }
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (java.io.IOException e) {
                    e.printStackTrace();
                }
            }
            if (httpURLConnection != null) {
                httpURLConnection.disconnect();
            }
        }
    }
}
Hutool HttpUtil实战:5分钟搞定文件上传与下载(附完整代码示例) 本文详细介绍了如何使用Hutool的HttpUtil工具快速实现Java中的文件上传与下载功能。通过对比原生API,展示了HttpUtil在简化HTTP请求、自动处理multipart/form-data格式以及支持流式下载与进度监听方面的显著优势,并提供了从基础应用到进阶控制(如精细请求配置、异常处理)的完整代码示例。 阅读详情

相关推荐

SSM框架下文件上传与下载的实现

SSM框架是由Spring、SpringMVC和MyBatis三个框架整合而来的,广泛应用于Java Web应用程序开发。Spring负责业务对象管理、SpringMVC负责前端控制器及视图解析,而MyBatis则作为数据持久层框架,负责数据库交互。SSM以其轻量级、灵活和高效等特点,受到众多开发者的青睐。SSM框架的三个主要组件包括:Spring:负责整个项目的IoC(控制反转)和AOP(面向切面编程)支持。Spring MVC:作为项目的Web层框架,负责处理用户的请求和响应。

weixin_32480007的博客 851

Java代码:调用外部接口(使用Json格式传递参数)的方法

Java代码:调用外部接口(使用Json格式传递参数)的方法   https://blog.youkuaiyun.com/guoshijie8023/article/details/81634278 代码如下:         String url="所给外部接口的url";         //创建连接对象         HttpClient httpClient = new HttpClient...

伏虎游侠的博客 9671

同时上传文件和相应的数据,实现前后台交互

同时上传文件和相应的数据,实现前后台交互,同时上传文件和相应的数据,实现前后台交互同时上传文件和相应的数据,实现前后台交互

Java中的参数传递

Java中的参数传递:分为值传递和引用传递 但本质上,Java中只有值传递。引用传递,其实可以理解为传的是类似指针的东西。 值传递就是把基本变量的值拷贝一份,传递这个拷贝。引用传递则是传递的引用的地址,也就是该变量在内存空间的地址。 1.值传递 只有基本数据类型采用值传递,特点是传递的是值的拷贝,传递完后两者就没有关系了。也就是说方法内和方法外的值互不相干 基本数据类型: ·整型:int,long,byte,short 浮点型:float,double 字符型:char 布尔型:boolean 注:8种基本

Dtruth的博客 1万+

采用http协议请求系统接口一次传输多个文件和属性

原来系统中采用webservice技术进行系统间通信,传递bean属性和文件。现在采用http协议代替,速度更快,更便捷。使用java httpclient做的一个demo,采用springboot框架,下载后放idea里面就可以运行。

Win10下YOLOv8环境搭建避坑指南:从CUDA 11.6到cuDNN配置全流程

本文详细介绍了在Windows 10系统下搭建YOLOv8环境的完整流程,包括CUDA 11.6和cuDNN的配置步骤,以及常见问题的解决方案。通过硬件准备、软件安装、环境验证和性能优化等环节,帮助开发者高效完成YOLOv8环境配置,提升目标检测项目的开发效率。

defi6farmer的博客 224

java WebService接口调用,传JSON参数

转自:http://zheyiw.iteye.com/blog/1571222import java.io.IOException;  import java.io.InputStream;  import java.io.OutputStreamWriter;  import java.net.HttpURLConnection;  import java.net.URL;    public ...

Wli_telent的博客 1万+

SPM12最新安装教程:Matlab2021a用户必看的路径配置技巧

本文为Matlab2021a用户提供SPM12的深度安装与路径配置指南。针对新版Matlab的路径管理变化,详细解析了传统方法失效的原因,并推荐通过创建startup.m文件实现SPM12路径的永久化、自动化配置,确保神经影像分析环境的稳定与高效。

weixin_29061509的博客 315

java 调用http接口,发送post请求,传递body参数

访问企业微信审批单详情 第一种: 使用 cn.hutool.http Map<String,Object> body = new HashMap<>(); body.put("sp_no","参数"); String result = HttpUtil.post("请求路径?access_token="+accessToken.getAccessToken(),JSONObject.toJSONString(body)); if (result != null) { .

栗子七的专栏 1万+

火山引擎之火山方舟知识库+OpenWebUI,搭建独属于自己的AI智能客服

创建接入点,接入点名称可按个人需求而定,比如Doubao-1.5-pro-32k,在添加模型选择Doubao-1.5-pro-32k,点击确定(PS:有些模型不支持知识库,若发现后续无法选择,请重新创建推理接入点。选择应用广场,创建零代码应用,在创建好的应用设置内编辑相关信息,并选择推理接入点,即先前建好的推理接入点;此处的模型名称是火山的模型ID名称,可在OpenWebUI设置-模型 中修改名称。至此所需的apikey和模型ID和请求的api地址(可选配置,非本文重点参数)。进入火山官网,注册账号。

AmaZInGvCH的博客 2652

Basilisk库教程

要在仿真中执行模块,其调度由Basilisk的[Process]和[Task]容器控制。BSK[Task]包含一系列模块,这些模块都以相同的更新频率执行。一个[Process]本质上是一个任务组,可以包含多个相关的任务。例如,在多星仿真中,你可以为每颗卫星创建一个[Process],以便将相关任务和嵌入式模块有序地组织起来。下图展示了一个示例布局,其中bskSat卫星的动力学被添加到与飞行软件(FSW)算法分开的进程中,这些算法在该卫星上执行。在每个进程中,设置了若干任务,这些任务以指定的频率进行评估。

weixin_57997461的博客 1137

apache http上传过慢_Httpclient实现文件上传、文件下载看这篇文章就够了

前言:使用httpclient实现文件的上传下载,废话补不多说,直接上概念上代码。1、相关概念:1 HTTP HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。 虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不...

weixin_28893183的博客 631

MacOS上VScode配置PlatformIO Core的疑难杂症与提速实战

本文详细解析了在MacOS上使用VScode配置PlatformIO Core时遇到的安装卡死、新建项目缓慢等常见问题,并提供了官方脚本安装、网络优化、命令行预下载等实用解决方案。通过环境变量配置和镜像源加速,大幅提升开发效率,特别适合ESP32等嵌入式开发场景。

weixin_42567046的博客 220

jsp上传文件

(转 ) JavaBean实现多个文件上传的两种方法摘要:本文介绍了JavaBean实现多个文件上传的两种方法,分别是使用http协议和ftp协议实现。首先讲述了http协议传送多个文件的基本格式和实现上传的详细过程,之后简单介绍了使用ftpclient 类实现了ftp方式的上传,最后对这两种方法进行了比较。 关键字:JavaBean 、http 、ftp 、ftpclient JavaBea

wheio8619的专栏 1965

【Neo4j × Python】基于知识图谱的电影问答系统(含问题记录与解决)附:源代码(含Bug解决)

此前,曾介绍过Neo4j的一些基础知识,本篇将在PyCharm中与Neo4j建立关联,从0到1实现一个基于知识图谱的电影问答系统,实现过程中,没有一帆风顺,而是遇到了一些问题,因此也包含问题的记录与解决。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 3166

【LAMMPS学习】四、运行 LAMMPS(2)命令行选项

本部分解释了在安装可执行文件或下载源代码并构建可执行文件后如何运行 LAMMPS。命令文档页面描述了输入脚本的结构以及它们可以包含的命令。

荷塘阅色 5242

java http 上传_使用HttpClient实现文件的上传下载

1 HTTPHTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编...

weixin_34580939的博客 627

【AIGC】大模型面试高频考点09-大模型Agent框架

聚焦AIGC专业技术分享

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 1967

JavaBean实现多个文件上传的两种方法

摘要:本文介绍了JavaBean实现多个文件上传的两种方法,分别是使用http协议和ftp协议实现。首先讲述了http协议传送多个文件的基本格式和实现上传的详细过程,之后简单介绍了使用ftpclient 类实现了ftp方式的上传,最后对这两种方法进行了比较。  关键字:JavaBean 、http 、ftp 、ftpclient  JavaBean是一种基于Java的软件组件。JSP对于在

给自己一点空间---活着.. 782

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

http 上传文件java_使用HttpClient实现文件的上传下载方法

1 HTTPHTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编...

weixin_34255327的博客 1109

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java iis上传文件_使用HttpClient实现文件的上传下载方法

1 HTTPHTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编...

weixin_42571280的博客 442

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

HTTP-CLIENT文件上传下载

copy from https://www.cnblogs.com/Scott007/p/3817285.html   1 HTTP     HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。     虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对...

aftertoday的专栏 277

使用HttpClient实现文件的上传下载

1 HTTP HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。 虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。 一般的情况下我们都是使...

sgdhshagf的博客 4164

使用HttpClient实现文件的上传下载方法

觉得写得不错,转载过来分享一下。转载自:http://www.jb51.net/article/100386.htm 下面小编就为大家带来一篇使用HttpClient实现文件的上传下载方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 1 HTTP HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Jav

Sir_viter的博客 1862

js上传文件的方式

一 . 平台 环境 win10 IDEA JDK8 springboot 二 . 上传文件 方式一 FormData 1.WebConfig.java (和Application.java同一目录下) 作用 将本地路径 D:\\upload\xxxxxxx 映射成为 http://127.0.0...

jack450250844的博客 1731

Http客户端工具类-HttpUtil

Http客户端工具类-HttpUtil 概述 HttpUtil是应对简单场景下Http请求的工具类封装,此工具封装了HttpRequest对象常用操作,可以保证在一个方法之内完成Http请求。 此模块基于JDK的HttpUrlConnection封装完成,完整支持https、代理和文件上传。 使用 请求普通页面 针对最为常用的GET和POST请求,HttpUtil封装了两个方法, H...

Hningning的博客 6168
上一篇: Android获取设备唯一标识的方法
下一篇: SpringBoot获取jar文件所在目录
JianfeiMa
博客等级 码龄10年 61粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值