Andoid - 开发实例(5):上传文件实现方法

DFT实训教程笔记2(bibili版本)- Scan synthesis practice 文章目录Scan synthesis practice 本博文是博主记录DFT实训教程的笔记版本,此笔记并没有对所有的知识进行记录,仅仅以自身的认知水平,来记录了一些部分笔记并加上了自己的理解。 Scan synthesis practice How to design scan clock structure? 假设一块chip里面有好几十个clock domain,如果每一个clock domain都用一个scan clock虽然会非常清晰,但是IO数目肯定不够用。 clock group: 1、no 阅读详情
一月份做项目时 Android 客户端需要上传图片,小小的研究了下,不改独享,分享!

如果要在客户端向服务器上传文件,我们就必须模拟一个POST multipart/form-data类型的请求,Content-Type必须是multipart/form-data
这篇详细介绍这个 ENCTYPE="multipart/form-data" 协议,来解决自己的Java程序向服务器传文件的问题(比如:安卓程序上传图片)

ENCTYPE="multipart/form-data" :通过 http 协议上传文件 rfc1867协议,客户端发送内容构造。

<form action="picture/upload.do" method="POST" ENCTYPE="multipart/form-data">
    <input type="text" name="users_id">
    <input type="text" name="users_name">
    <input type="file" name="image_path">
    <input type="submit">
</form>
使用上面这个表单,抓包的结果如下
POST /picture/upload.do HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Referer: http://192.168.1.98:8080/uploadpic.jsp
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 
Content-Type: multipart/form-data; boundary=---------------------------7dd36df20300
Accept-Encoding: gzip, deflate
Host: 192.168.1.98:8080
Content-Length: 529762
Connection: Keep-Alive
Cache-Control: no-cache

-----------------------------7dd36df20300
Content-Disposition: form-data; name="users_id"
<!--空行-->
1
-----------------------------7dd36df20300
Content-Disposition: form-data; name="users_name"
<!--空行-->
admin
-----------------------------7dd36df20300
Content-Disposition: form-data; name="image_path"; filename="S21223-170317.jpg"
Content-Type: image/pjpeg
<!--空行-->
<!--文件 byte 数据-->
-----------------------------7dd36df20300--
<!--空行-->

详细解析:
Content-Type: multipart/form-data; boundary=---------------------------7dd36df20300
根据 rfc1867, multipart/form-data是必须的。
---------------------------7dd36df20300  是分隔符,分隔多个文件、表单项。
其中 d36df20300 是即时生成的一个字符,用以确保整个分隔符不会在文件或表单项的内容中出现。
---------------------------7d    IE内核标志
---------------------------71    Mozila内核标志
从请求体里可以看出每一条数据后面都有换行 \r\n ,并且 Parameter 和 value 之间还有个空行
最后把格式提取:
--分隔符 \r\n
Content-Disposition: form-data; name="[Parameter]" \r\n
\r\n
[value] \r\n
--分隔符 \r\n
Content-Disposition: form-data; name="[Parameter]"; filename="[]" \r\n
Content-Type: image/pjpeg \r\n
\r\n
<!--文件 byte 数据--> \r\n
--分隔符-- \r\n
\r\n

了解了传输格式,接下来就是程序实现:

String path = "http://192.168.1.102:8080/picture/upload.do";
// 换行符
String enter = "\r\n";
// 分割线
String boundary = "---------------------------7dd36df20300";
StringBuffer sb = new StringBuffer();
// 获取文件流
File file = new File("D:\\123.jpg");
FileInputStream is = new FileInputStream(file);
// 参数信息
String[] keys = { "users_id", "users_name" };
String[] values = { "1", "admin" };
// 拼凑参数
for (int i = 0; i < keys.length; i++) {
    sb.append("--" + boundary + enter);
    sb.append("Content-Disposition: form-data; name=\"" + keys[i] + "\"");
    sb.append(enter + enter);
    sb.append(values[i]);
    sb.append(enter);
}
// 拼凑文件头部信息
sb.append("--" + boundary);
sb.append(enter);
sb.append("Content-Disposition: form-data; name=\"image_path\"; filename=\"123.jpg\"");
sb.append(enter);
sb.append("Content-Type: image/*");
sb.append(enter + enter);
byte[] data = sb.toString().getBytes();
byte[] end_data = (enter + "--" + boundary + "--" + enter + enter).getBytes();
// 初始化 HttpURLConnection
URL url = new URL(path);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setConnectTimeout(3000);
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestMethod("POST");
con.setRequestProperty("Connection", "Keep-Alive");
con.setRequestProperty("Charset", "UTF-8");
con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
con.setRequestProperty("Content-Length", file.length() + data.length 
+ end_data.length + "");
// 开始上传
OutputStream outputStream = con.getOutputStream();
outputStream.write(data);
byte[] fileBuffer = new byte[1024];
int length = -1;
while ((length = is.read(fileBuffer)) != -1) {
    outputStream.write(fileBuffer, 0, length);
}
is.close();
outputStream.write(end_data);
outputStream.flush();
outputStream.close();
con.getResponseCode();



SPSS_Process—简单&平行&链式中介模型 本篇文章介绍采用SPSS的插件Process对简单中介、链式中介、平行中介模型进行检验的操作方法及结果解读。 阅读详情

相关推荐

雷电模拟器安装面具环境并过软件检测系列(看这一篇就够了!)

雷电模拟器安装面具环境并过基本软件的环境检测

qq_45059975的博客 6万+

Jenkins+Unity+Mac+Ipa&Apk 总结

根据项目初级的需求,整理一键化这个功能。美中不足的是,因为游戏用的是tolua框架,而最新的mac机器不是luajit ,是原生lua。所以mac用打了字节码的bundle是解析不了的。 但是mac可以打非lua字节码的bundle。 所以AB文件必须在win平台下打好,提交才可以在打包。也就是没有实现真正的一键化打包。。。。。。。 如果有2台打包机,一个window打AB,一个Mac打...

xj1009420846的博客 1157

IAP板卡远程升级(串口网口都可)+Ymodem+AES对bin文件加密+pc软件+板卡相互烧录

还是决定记录一下,毕竟这个东西我也搞了挺久的,遇到一些棘手的,或者是因为我很粗心遇到的问题也和大家分享一下,。 板卡核心是 STM32F103RCT6,256kflash 前言 开始看这个远程升级的时候,我是一头雾水的,原子哥的教程里面也有说到过iap,有了一个大概的了解,我想不明白的是,通过串口下载的方式把hex文件下载到flash,和把bin文件下载到flash难道不是拉一根线,下载一个文件嘛,(初入职场的我并没有考虑到安全这个问题)如果直接将hex文件给到客户那边,风险是非常大...

那可真是太开心了的博客 5371

基于Android的 拍照上传 程序开发

大家好,我是PETER(cfwdl)。写这篇文章是为了帮助以前没有没有接触过anroid或是刚刚入门并没有摸过手机的硬件设备监测、使用等功能的朋友,给大家一个我自己的写的心得和经验,我也是新手,所以大家互相交换一下经验吧。当然每个程序都会有问题,因为我不是最终用户,软件的测试工作没有好好测试过,大家凑合看看吧~!程序介绍:本程序主要完成一个煎蛋的android手机拍照程序(本程序的拍照功能比较简单,没有添加处理图像、手机自动对焦等功能,如果有需要的朋友可以自行参考一下相关linstener或action的资

PETER的专栏 3万+

WVP+ZLM国标平台实战:从设备注册失败到视频播放黑屏,我遇到的5个典型问题与解法

部署WVP+ZLM国标视频平台时,设备注册失败、视频播放黑屏等问题常常让运维人员头疼不已。本文将基于真实运维场景,剖析五个最具代表性的故障案例,提供从网络配置到版本兼容性的全链路解决方案。

weixin_33178839的博客 362

UniDexGrasp++算法实战:无需预生成姿态的灵巧抓取测试指南

本文详细解析了UniDexGrasp++算法在灵巧抓取测试中的实战应用,该算法无需预生成姿态即可实现高效抓取,特别适合处理形状不规则的物体。文章涵盖了环境配置、数据集优化、训练流程及实际测试中的调参技巧,帮助开发者快速掌握这一ICCV 2023提出的先进算法。

weixin_29045585的博客 279

android 文件、图片上传功能实现

方法一: 使用 afinal上传

小宾 1703

【一】PCIe基础知识

Linux PCIe基础知识

他山之石 可以攻玉 4万+

日常水文章之安卓文件上传(okhttpclien)

不废话直接先导包: 这里我是用的jar包,你们可以网上直接找最新的,也可以找跟我版本差不多的 fun Upload(uploadFilePath: String?, Uri: String?, mMediaType: String?, mResponseCallback: ResponseCallback) { Log.i("TAG", "uploadFilePath:" + u.

沐的博客 6962

轴承寿命预测 | 基于BiLSTM双向长短期记忆神经网络的轴承寿命预测附matlab完整代码

轴承寿命预测 | 基于BiLSTM双向长短期记忆神经网络的轴承寿命预测附matlab完整代码

默默科研仔的博客 274

【专栏必读】王道考研408计算机网络+湖科大教书匠计算机网络+网络编程万字笔记使用说明及章节导航

本文档汇总了王道考研408计算机网络和湖科大教书匠计算机网络课程的重点内容,包括计算机网络体系结构、物理层、数据链路层、网络层、传输层和应用层的详细讲解。通过ISO/OSI和TCP/IP模型,深入探讨了通信基础、介质访问控制、IP地址、TCP/UDP协议、流量控制和网络编程等关键概念。此外,还提供了Linux网络编程实践,帮助读者巩固理论知识

快乐江湖的博客 2万+

Android获取文本和文件的MD5密纹和SHA1密纹

最近在做图片上传的应用,出于对文件上传的完整性和安全性的校验,我们使用了较为简单的MD5校验。今天我们就来简单的说一下在Android平台下如何使用官方提供的API获取文件以及文本的MD5密纹用于校验。本篇主要会介绍两种方式,一种是MD5,一种是SHA-1;至于原因可以参见下面我从API文档截取的图片: 关于MD5和SHA的理论介绍,网上也有很多介绍,这里不再累述,具体可以参...

hfut_why的博客 1201

多体动力学分析软件:ADAMS_(15).多体动力学建模与分析实践

1. 在工具栏中选择“Body”工具。2. 在图形窗口中点击鼠标左键选择刚体的中心点。3. 按住鼠标左键拖动,定义刚体的尺寸。4. 在弹出的属性对话框中设置刚体的质量、惯性参数等。关节是连接刚体的关键部件,定义关节时需要选择合适的关节类型并设置关节的参数。约束是对刚体运动的限制,定义约束时需要选择合适的约束类型并设置约束的参数。1. 在主菜单中选择“Model” > “Optimization” > “Objective Function”。

kkchenjj的博客 1311

Android HTTP multipart/form-data 请求协议信息实现图片上传

问题: Android应用中,当遇到填写用户信息、发表评论等操作,不可避免会遇到“form表单操作”(类似web form操作)上传图片的功能。 在这种情况下,使用Android的HTTPConnection/ ApacheHTTP 通过POST 和GET的方式就实现不了。 解决方法: Android客户端通过模拟 HTTP multipart/form-data 请求协议信息实现图片

zcmain的专栏 4603

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Android上传图片到服务器

上一篇博客介绍了Android压缩图片 这篇博客介绍把压缩后的图片上传到服务器。 由于我只熟悉JAVA编程,这里的服务器端也是采用JAVA编写的,这里首先介绍介绍基于JAX-WS API的Webservice接收图片,然后介绍Http post接收图片。 开发环境:MyEclipse 10 Tomcat 7 Java Webservice 接收手机端上传图片 打开MyEclips

专注Android开发 1368

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Pro Android学习笔记(六九):HTTP服务(3):HTTP POST MultiPart

HTTP POST不仅可以通过键值对传递参数,还可以携带更为复杂的参数,例如文件。HTTP Post支持携带body,content-type为multipart。本次我们将尝试通过http post上传一个小文件。 建立测试环境 上传文件的测试环境很难找,下载了Tomcat,想装一个环境,打开后,发现忘得也差不多,要看帮助,比较麻烦,下面是我上传文件到189网盘抓的包,上传一个图片文件,整个

愷风(Wei)的专栏 6502

lwip-2.0.3

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

Android 实现能够暂停的录音功能

转载请注明出处:http://blog.youkuaiyun.com/yegongheng/article/details/40624267       我们知道Android ApI提供了MediaRecorder和AudioRecord两个类给开发者来很方便地实现音视频的录制(前者可以实现音频和视频的录制,后者只能实现音频的录制)。这两个类都提供了start()和stop()方法用于

Android起跑线 1047

如何写一个混淆配置文件

一、混淆apk的必要性 当我们的app开发完毕上传各大应用市场的时候如果我们不进行apk的混淆就会导致app的安全性大大的降低,你也不想自己幸幸苦苦做完的项目就这么轻易的被别人窃取了。混淆虽然不能完全防止别人反编译apk看到你的代码,也能很大程度上让反编译的代码阅读性降低。所以混淆还是必须的。二、如何混淆 在Android Studio当中混淆APK实在是太简单了,,只需要修改b

七夜聖君的博客 1658

PHP8.3+SQLite3轻量网盘部署实战:环境配置与性能优化指南

SQLite作为轻量级嵌入式数据库,以其零配置、单文件存储的特性在小型Web应用中广受欢迎。其基于文件锁的并发控制机制虽然简单高效,但在高并发写入场景下可能存在性能瓶颈。从技术价值看,SQLite极大降低了数据库部署复杂度,特别适合个人项目、原型开发和资源受限环境。在文件分享网盘、博客系统、移动应用等场景中,SQLite能有效支撑基础数据存储需求。本文以尘集外链网盘为例,详细解析PHP8.3环境下SQLite3的兼容性配置、文件上传优化策略,并针对数据库锁和并发写入等常见问题提供解决方案,帮助开发者快速构建

weixin_33778544的博客 393

AndroidStudio通过intent播放sdcard中的音乐时闪退问题

一、代码 在布局文件中添加一个button,在主类中为button设置监听事件,通过intent来播放音乐 1.编写activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_

qq_52491380的博客 1568

Android 动画各种实现,包括帧动画、补间动画和属性动画的总结分享

AndroidAnimationExercise 项目地址:REBOOTERS/AndroidAnimationExercise 简介: Android 动画各种实现,包括帧动画、补间动画和属性动画的总结分享 更多:作者提 Bug 标签: 转存失败重新上传取消 这是一个关于 Android 中各种 View 的集合,里面包含自己日常开发和博客总结中的代码。 主要内容...

未来很长,但我会努力的走下去。 768

海外SDK之----------谷歌支付

哈喽,么么哒!我们继续上次说好的谷歌支付。 同国内sdk一样,支付必须得有商品ID才行,谷歌也一样,如果你是个人开发者,你得需要在 https://play.google.com/apps/publish/signup 这个网址花费25美金申请一个账户, 然后在后台创建你的应用,然后就是申请你支付信息,由于我也没有具体去申请过,所以我在这里转载一个网址 http://www.cnb...

大嫂的博客 3070

android经典蓝牙开发

Android蓝牙开发

limeng的博客 1079

Android 之实现类似QQ图片说说照片选择

Android 之实现类似QQ图片说说照片选择转载请注明出处:http://blog.youkuaiyun.com/klxh2009/ 本文出自【付小华的博客】 效果展示 布局文件 代码实现 效果展示 布局文件 布局是很简单的,一个GridView,直接上布局: layout/activity_add_photo.xml<?xml version="1.0" encoding="utf-8"?> <Lin

付小华的博客 6681

小白如何使用Android Studio把自己的Android library分享到jCenter

本文的目的是帮助的小伙伴把自己的Android Studio里面的Android library分享到jCenter,从而更好的使用

tingxuege 619

易接SDK接入:Android手游支付功能接口实现,完整代码奉上

  之前在一家游戏公司写过游戏服务端,游戏支付功能,这个是接入“易接”平台的SDK实现的, 由于涉及的坑比较多,所以总结一下经验,以及奉上完整代码。   首先我们的项目是以Cocos2dx引擎的手游,这个用visual Studio编写代码, 这个项目是LUA工程,但是里面有多个平台的代码,但是我们现在只写Android这一块 它可以实现跨平台:Android,IOS,blackberry,...

哲学天空的博客 3680
上一篇: Java.Web - JSP文件上传,Servlet接收文件
下一篇: Java.WebService - Webservice初体验之调用学院客户端开放接口
刘云龙在搞机
博客等级 码龄14年 57粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值