android 文件上传(POST方式模拟表单提交)

python 上传文件接口测试,上传文件接口调试 最近在写脚本时有一个功能是上传附件,也趁这个机会学习了下对于上传文件类的接口该如何进行传参本次介绍2种方式来上传附件:一种是通过jmeter;另一种是通过python的requests库接口参数分析在讲具体方法之前,先来分析下这次上传附件接口的headers与携带的参数信息headers种主要看content-type,这个请求中的content-type如下content-type: multi... 阅读详情

android 文件上传(POST方式模拟表单提交)

直接上代码


    /**
     * @category 上传文件至Server的方法
     * @param uploadUrl 上传路径参数
     * @param uploadFilePath 文件路径
     * @author ylbf_dev
     */
    private void uploadFile(String uploadUrl,String uploadFilePath) {
        String end = "\r\n";
        String twoHyphens = "--";
        String boundary = "******";
        try {
            URL url = new URL(uploadUrl);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setDoInput(true);
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setUseCaches(false);
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
            httpURLConnection.setRequestProperty("Charset", "UTF-8");
            httpURLConnection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);

            DataOutputStream dos = new DataOutputStream(httpURLConnection.getOutputStream());
            dos.writeBytes(twoHyphens + boundary + end);
            dos.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"test.jpg\"" + end);
//          dos.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\""
//                  + uploadFilePath.substring(uploadFilePath.lastIndexOf("/") + 1) + "\"" + end);
            dos.writeBytes(end);
            // 文件通过输入流读到Java代码中-++++++++++++++++++++++++++++++`````````````````````````
            FileInputStream fis = new FileInputStream(uploadFilePath);
            byte[] buffer = new byte[8192]; // 8k
            int count = 0;
            while ((count = fis.read(buffer)) != -1) {
                dos.write(buffer, 0, count);

            }
            fis.close();
            System.out.println("file send to server............");
            dos.writeBytes(end);
            dos.writeBytes(twoHyphens + boundary + twoHyphens + end);
            dos.flush();

            // 读取服务器返回结果
            InputStream is = httpURLConnection.getInputStream();
            InputStreamReader isr = new InputStreamReader(is, "utf-8");
            BufferedReader br = new BufferedReader(isr);
            String result = br.readLine();
            mLog.d(result);
            dos.close();
            is.close();

        } catch (Exception e) {
            e.printStackTrace();
            setTitle(e.getMessage());
        }

    }

值得注意的是这其实就是模拟了表单提交, 就是把信息拼接到头里面 ,这里面的头信息一定要按照规范格式去写。

这是抓取到的头信息

POST http://127.0.0.1/upload.aspx HTTP/1.1
Connection: Keep-Alive
Charset: UTF-8
Content-Type: multipart/form-data;boundary=******
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.4.4; GT-I9300 Build/KTU84Q)
Host: 127.0.0.1
Accept-Encoding: gzip
Content-Length: 736640

--******
Content-Disposition: form-data; name="file"; filename="test.jpg"

关于Content-Disposition

注意这里

Content-Disposition: form-data; name="file"; filename="test.jpg"

我就遇到了不同的服务器对这里的处理识别问题,一定要写成这样 你的name 和filename按照接口要求去写,外面的双引号是必须的 虽然有些人写成了单引号 有些服务器就过去了 但是环境不一样,还是要按照规范去写。

关于boundary:

RFC文档上描述,A boundary is selected that does not occur in any of the data.意思就是选择作为boundary的数据不会出现在要上传的数据里,这一点毫无疑问,如果作为分界数据的boundary,会出现在上传的数据里,那么boundary就没有意义了~其实RCF上没有规定boundary的格式,但是大多数实现里boundary都采用了—–配合一个随机数据的方式。 我这里使用的是--******

关于multipart/form-data上传方式:

其实在封装HTTP POST上传文件的方法时,只要实现这一种即可(单个文件也可以用这种方式上传),下面上RFC上的Sample:

Content-Type: multipart/form-data, boundary=AaB03x

--AaB03x
Content-Disposition: form-data; name="field1"

Joe Blow
--AaB03x
Content-Disposition: form-data; name="pics"; filename="file1.txt"
Content-Type: text/plain

 ... contents of file1.txt ...
--AaB03x--

文件分界这里要切记切记切记(重要的事说三遍)
开始是-- + boundary

        String end = "\r\n";
        String twoHyphens = "--";
        String boundary = "******";
        dos.writeBytes(twoHyphens + boundary + end);

结束的标志是--+ boundary + --,

        String end = "\r\n";
        String twoHyphens = "--";
        String boundary = "******";
        dos.writeBytes(twoHyphens + boundary + twoHyphens + end);

在每一段信息描述后要跟一个\r\n再跟文件数据,文件数据后面也要跟一个\r\n,这里也是一个关键点,其他只要按照上面的Sample去实现就好了,如果Content-Type部分不想添加根据文件后缀名填充值的话,可以直接用application/octet-stream。

附录

RFC文档:http://www.ietf.org/rfc/rfc1867
Content-Type对照表:http://tool.oschina.net/commons

Android OkHttp Post上传文件并且携带参数实例详解 Android OkHttp Post上传文件并且携带参数 这里整理一下 OkHttp 的 post 在上传文件的同时,也要携带请求参数的方法。 使用 OkHttp 版本如下: compile 'com.squareup.okhttp3:okhttp:3.4.1' 代码如下: protected void post_file(final String url, final Map map, File file) { OkHttpClient client = new OkHttpClient(); // form 表单形式上传 Mul 立即下载

相关推荐

NE564锁相环FM解调电路设计:10.7MHz中频实测与3种失真优化方案

本文详细解析了NE564锁相环在10.7MHz中频FM解调电路中的设计与优化方案。通过分析锁相环技术基础、电路架构设计及典型失真问题,提供了3种有效的失真优化方法,包括限幅增强、VCO频偏补偿和环路滤波优化,显著提升解调性能。文章还涵盖了PCB布局要点和系统测试验证,为高频电子线路设计提供实用参考。

weixin_33314040的博客 350

Android——Post的请求格式Json格式和表单格式

发送Post请求一般有两种格式:Json格式和表单格式来发送请求。这里两个工具类来使用发送post请求:表单格式://表单body FormBody body = new FormBody.Builder().add("news_id", news_id + "").add("fromname", fromname).add("time", time).build();public static v

Li_peilun的博客 4973

【TM1650】STM8S TM1650芯片控制程序

以下为.h文件: #ifndef __TM1650_I2C_H #define __TM1650_I2C_H #include "stm8s.h" #include "stm8s_gpio.h" #include "tim1.h" #include "usart2.h" #include <iostm8s103f3.h> #include <intrinsics....

cxw312864660的博客 1万+

android之http请求之post模拟form表单

通过HttpPost和DefaultHttpClient发送http的post请求时,设置连接超时和读取超时等参数,有2种方法,本人测试了第1种。先上代码。 第1种方法:通过DefaultHttpClient的getParams()方法设置。 import java.util.List; import org.apache.http.HttpResponse; import org.ap

阿不的专栏 5260

重磅!Repo Wiki!

RepoWiki是Qoder平台的智能文档生成功能,通过静态代码分析自动提取项目架构、模块依赖和核心逻辑,并持续追踪代码变更保持文档同步。其工作流程分为四个阶段:1)代码扫描与AST解析;2)结构分析与依赖映射;3)文档智能生成;4)增量更新机制。支持多种编程语言,能识别设计模式并推断技术决策,适用于新项目搭建和遗留系统维护。优势在于降低理解成本和提高开发效率,但存在文件数量限制和依赖Git的局限性。典型应用场景包括自动生成架构图、API手册和团队知识沉淀。

ayusong870的博客 4024

告别社区5级:一个脚本搞定小米/红米BL解锁的账号绑定限制(附资源下载与避坑指南)

本文提供了一种绕过小米/红米设备Bootloader解锁社区等级限制的技术方案,适用于MIUI 12.5-14和HyperOS 1.0系统。通过自动化脚本临时修改系统组件,用户可快速完成账号绑定和设备解锁流程,附详细操作指南和常见问题解决方案。

weixin_27330481的博客 730

android http模拟表单提交,HttpURLConnection模拟post提交form表单

原理是: 分析文件上传的数据格式,然后根据格式构造相应的发送给服务器的字符串。格式如下:这里的httppost123是我自己构造的字符串,可以是其他任何的字符串----------httppost123 (\r\n)Content-Disposition: form-data; name="img"; filename="t.txt" (\r\n)Content-Type: application...

weixin_42394780的博客 757

基于Simulink的电机轴电压与轴电流抑制仿真

本文带你完成了电机轴电压与轴电流抑制的Simulink仿真,实现了:✅ 揭示了共模电压 → 寄生电容 → 轴电压 → 轴承电蚀的完整链路✅ 搭建了含寄生参数的高频电机等效模型共模电压最小化PWM(源头抑制)dv/dt滤波器(路径阻断)轴接地(终端泄放) ✅ 通过仿真验证了轴电压从68 V降至<3 V的显著效果 ✅ 为高可靠性电机系统提供低成本、高效益的轴承保护方案。

amy_mhd的博客 163

android java表单,android学习笔记之POST提交表单

JAVA代码:package com.main1;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.HashMap;import...

weixin_29325515的博客 276

34 python 时间和日期

介绍python里时间和日期的常用方法,以及案例,还有注意事项。

水滴爬呀爬 347

【即插即用模块】Transformer篇 | ICCV 2025 | MALA :注意力分布神似Softmax,告别线性注意力性能短板!

MALA(Magnitude-Aware Linear Attention)是一种改进的线性注意力机制,通过引入缩放因子和偏移项,解决了传统线性注意力忽视查询幅度的问题,使其分布更接近Softmax Attention。该模块具有线性复杂度(O(n)),结合RoPE和LEPE编码实现全局-局部位置信息混合,通过z值调制平衡信息权重。实验表明MALA在轻量级视觉任务中能有效平衡效率与精度,注意力可视化显示其分布与Softmax Attention高度相似。代码提供完整的RoPE位置编码和线性注意力

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1106

android 动态表单提交,android 文件上传(POST方式模拟表单提交)

android 文件上传(POST方式模拟表单提交)直接上代码/** *@category 上传文件至Server的方法 *@param uploadUrl 上传路径参数 *@param uploadFilePath 文件路径 *@author ylbf_dev */private void uploadFile(String uploadUrl,String uploadFilePath) {S...

weixin_33335851的博客 505

第10章《VTK自定义部件Widget》

是用于交互式操作 3D 场景的组件,例如移动对象、调整尺寸、创建标注等。VTK 提供了一些内置的 Widget,如。,用户可以点击鼠标,在 3D 场景中放置一个点。负责绘制一个点,并控制其颜色、大小等。,可用于 3D 标注、对象拾取等应用!等,但在某些应用中,我们需要。这样,我们就创建了一个。

yumeiguo的博客 523

android post方式上传文件(模拟表单格式数据提交)

表单提交内容为: POST /upload.php?zp_id=ab46ca6d703e3a1580c1c9b8b3a8fb39 HTTP/1.1Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-ms-application, application/x-ms-xbap, application...

669

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

继续上次的android上传文件携带参数POST提交

之前的文章实现了一个可以直接上传文件到服务器的例子,但是实际中很少有情况能直接上传服务器,换句话说都需要验证一下身份,成功登录才可以实现上传啊访问啊之类的功能,这次在PHP服务器端作了限制,这个限制就是对表单传来的数据进行一个验证,如何“admini”这个用户存在,则可以执行上传文件功能,如果不存在或者输入的用户不是admin,那么则拒绝操作。admin这个用户名放在 input 标签里,如:

newbird105的专栏 1054

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android模拟表单提交文字和图片(HttpClient AND HttpURLConnection)

在HttpClient还没有被废弃之前了,感觉模拟表单提交还是比较简单的,因为有MultipartEntityBuilder的支持。看下面代码:private String uploadFile(String url, HttpEntity entity) { HttpClient httpClient=new DefaultHttpClient();// 客户端 HTTP 请求

小俊的专栏 1744

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

android模拟表单提交多数据

移动开发,经常会遇到图片(多图片),视频,录音,文本信息等复杂数据的提交问题,所以可以让android模拟web表单的方法一次行提交所有数据。我封装了一个公共类。直接上代码,下面的代码需要用到xUtils-2.6.14.jar,httpcore-4.3.3.jar,httpmime-4.3.6.jar //多数据上传操作类 public class MultiUploadOperation

代码小学生的博客 1445

ajax 模拟表单提交,Ajax模拟Form表单提交,含多种数据上传

---恢复内容开始---Ajax提交表单、使用FormData提交表单数据和上传的文件(这里的后台使用C#获取,你可以使用Java一样获取)有时候前台的数据提交到后台,不想使用form表单上传,希望通过Ajax上传,那么怎么实现呢?前台页面:ClientCropIDSecretAppIDLogoSaveJS代码:$("#saveInfo").click(function () {var clien...

weixin_39863616的博客 1201

java表单批量提交_Java实现表单提交(支持多文件同时上传)

在Android里面或者J2EE后台需要趴别人网站数据,模拟表单提交是一件很常见的事情,但是在Android里面要实现多文件上传,还要夹着普通表单字段上传,这下可能就有点费劲了,今天花时间整理了一个工具类,主要是借助于HttpClient,其实也很简单,看一下代码就非常清楚了HttpClient工具类:HttpClientUtil.javapackage cn.com.ajava.util;imp...

weixin_33348983的博客 1324

android 文件上传(模拟表单提交)

  package irdc.ex08_11; import java.io.BufferedReader; /* import相关class */ public class EX08_11 extends Activity { /* * 变量声明 filename:上传后在服务器上的文件名称 uploadFile:要上传的文件路径 actionUrl:服务器上...

yzyspy的专栏 296

Android模拟表单提交(上传文件)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33724059的博客 288

android http模拟表单提交,HttpClient(五)-- 模拟表单上传文件(示例代码)

importjava.io.File;importjava.io.IOException;importorg.apache.http.HttpEntity;importorg.apache.http.HttpResponse;importorg.apache.http.client.ClientProtocolException;importorg.apache.http.client.HttpC...

weixin_33989001的博客 226

Java、Android实现表单提交——支持多文件同时上传

在Android里面或者J2EE后台需要趴别人网站数据,模拟表单提交是一件很常见的事情,但是在Android里面要实现多文件上传,还要夹着普通表单字段上传,这下可能就有点费劲了,今天花时间整理了一个工具类,主要是借助于HttpClient,其实也很简单,看一下代码就非常清楚了 HttpClient工具类: HttpClientUtil.java package cn.com.a...

diecunwen5354的博客 185

Android 模拟表单请求及servlet服务器对接示例

Android 模拟post与servlet对接,实现文件与文本上传。

滴水穿石,不断积累! 559

使用Fiddler——模拟Http请求及对android应用抓包

模拟Http请求,这里介绍使用Fiddler模拟两种常见的请求方式,Post请求和Get请求。 对android应用进行抓包。

dabaoonline的专栏 3140
上一篇: android studio更换默认的ic_launcher图标问题
下一篇: Joda-Time
YLBF_DEV
博客等级 码龄12年 30粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值