android 文件上传的类--完整 可以直接被调用的
public class post {
// 如果是文本的文件的话那么通过map类传递进来如果是文件的话通过FormFile传递进来
public static String post(String actionUrl, Map<String, String> params,
FormFile[] files) throws IOException {
String BOUNDARY = "743520vjdk4e";
String MULTIPART_FROM_DATA = "multipart/form-data";
URL uri = new URL(actionUrl);
HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
conn.setReadTimeout(5 * 1000); // 缓存的最长时间
conn.setDoInput(true);// 允许输入
conn.setDoOutput(true);// 允许输出
conn.setUseCaches(false); // 不允许使用缓存
// 下面的几个值是必须需要设置进去的
conn.setRequestMethod("POST");
conn.setRequestProperty("connection", "keep-alive");
conn.setRequestProperty("Charsert", "UTF-8");
conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA
+ ":boundary" + BOUNDARY);
// 首先组拼文本类型的参数
StringBuilder sb = new StringBuilder();
// 这个地方使用了Map循环 map循环的方式需要注意一下了
for (Map.Entry<String, String> entry : params.entrySet()) {
sb.append("--");
sb.append(BOUNDARY);
// 回车换行
sb.append("\r\n");
sb.append("Content-Disposition:form-data:name\"" + entry.getKey()
+ "\r\n\r\n");
sb.append(entry.getValue());
sb.append("\r\n");
}
DataOutputStream outStream = new DataOutputStream(conn
.getOutputStream());
outStream.write(sb.toString().getBytes());
// 前面必须是数组才可以
// 发送文件数据
for (FormFile file : files) {
StringBuilder sb1 = new StringBuilder();
sb1.append("---");
sb1.append(BOUNDARY);
sb1.append("\r\n");
// 这个地方没有完
sb1.append("Content-Disposition:form-data:name=\""
+ file.getFormname());
sb1.append("Content-Type" + file.getContentType() + "\r\n\r\n");
outStream.write(sb1.toString().getBytes());
// 先判断formfile里面是否为空 如果不为空的话则写出 获取formfile的data里面的
if (file.getInStream() != null) {
// 提供流的的方式的话就是一边读一边写了
byte[] buffer = new byte[1024];
int len = 0;
while ((len = file.getInStream().read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
file.getInStream().close();
} else {
outStream.write(file.getData(), 0, file.getData().length);
}
outStream.write("\r\n".getBytes());
}
byte[] end_data = ("--" + BOUNDARY + "\r\n").getBytes();
outStream.write(end_data);
outStream.flush();
// 得到响应号码
int res = conn.getResponseCode();
if (res != 200)
throw new RuntimeException("请求失败 ");
InputStream in = conn.getInputStream();
int ch;
StringBuilder sb2 = new StringBuilder();
while ((ch = in.read()) != -1) {
sb.append((char) ch);
}
outStream.close();
conn.disconnect();
return in.toString();
}
这是相关联的formFIle类的定义
public class FormFile {
// 定义了使用的文件的特点
// 上传文件的数据
private byte[] data;
private InputStream inStream;
// 文件名称
private String fileName;
// 请求参数名称
private String Formnames;
// 内容类型
private String contentType = "application/octet-stream";
public FormFile(byte[] data, String fileName, String formnames,
String contentType) {
this.data = data;
this.fileName = fileName;
Formnames = formnames;
this.contentType = contentType;
}
public FormFile(InputStream inStream, String fileName, String formnames,
String contentType) {
this.inStream = inStream;
this.fileName = fileName;
Formnames = formnames;
this.contentType = contentType;
}
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
public InputStream getInStream() {
return inStream;
}
public void setInStream(InputStream inStream) {
this.inStream = inStream;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFormnames() {
return Formnames;
}
public void setFormnames(String formnames) {
Formnames = formnames;
}
public String getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
分享到:
相关推荐
Unity 调用Android文件资源管理器,可以选择Android手机上的图片,视频等一些列文件,并且获得相关的文件路径。直接导入Unity即可运行。测试已经通过
Android网络请求的统一封装和调用.集成了android-async-http, volley, okhttp3等网络请求框架.可直接切换底层库. 1 简介 架构分层 总共分为三层: 网络请求调用层. app统一调用该层接口和这层提供的回调,该层可以...
安卓移动开发课程设计/Android期末大作业-拼图游戏 可以调用安卓 iOS相册相机 - 运行中有什么问题可以私聊博主,本人高级安卓工程师,主页置顶有常见爆红解决的方法,以及更多代码项目 ## 项目备注 1、该资源内项目...
Android一个简单实用把Log日志打印到手机本地文件,可以自行取出来上传到服务器开源代码
首先创建一个文件,用于保存拍照图像,然后根据不同系统版本获取Uri,传递给Intent,然后调起相机(可以考虑将outputImage、imageUri设置为全局变量)。 3、处理回调 使用BitmapFactory读取imageUri,得到bitmap,...
本项目是android手机客户端通过调用系统录音机或者选择现有录音文件,实现录音文件上传,包括android手机客户端和web服务器。且直接导入到eclipse就可运行。
� GPS 卫星导航功能,手机照相, MP3 ,蓝芽等均被列为 Android 所提供支持的基本选项。 � Android 的平台基本上是免费的,虽然有部份原生链接库会要求费用,但大部份是免权利金; Android 的 程序可以采用 JAVA ...
网上的一个demo,使用plus中的IO方法选择本地文件,里面的样式等需要自己更改 这个最新的android12也可以使用 只能是Android系统使用
MediaRecorder:是Android系统直接提供给我们的录制类,用于录制音频和视频的一个类,简单方便,不需要理会中间录制过程,结束录制后可以直接得到音频文件进行播放,录制的音频文件是经过压缩的,需要设置编码器,...
实现:将android文件通过服务端上传至服务器; 获取android本地文件,通过调用服务端后台代码进行文件上传。 只需要分别调用移动端uploadMultiFile()方法和服务端upload()方法。
android调用摄像机拍照并通过httpservlet将图片上传至Pc端的服务器,此代码可以改造成上传文件的程序
进行除法运算时,除数不能为0,如果遇到除数为0的情况,则这种可能性可以直接排除。 总结与体会 通过学习开发扑克牌计算24点app,了解了android studio开发的基本原理。学习了android程序的运行过程。一个进程...
C# Xamarin.Android ...Input调用手机摄像头上传图片,或通过选择器选中拍照还是图片 Js交互传递Location坐标信息 动态申请权限 开发版本:Visual2019,Visual2022编译通过 注意: AndroidManifest.xml配置文件
|--android中anim文件特效 |--app信息menifest获取(如版本号) |--AsyncQueryHandler之异步查询Cursor处理 |--AutoCompleteTextView自动提示的用法 |--BitMap、Drawable、inputStream及byte[] 互转 |--...
uni-app App端内置HTML5 +引擎,提供加接口,对于Android系统可以直接调用Android系统函数,打开系统目录。而对于iOS而言,没有找到使用方法 既然内置HTML5 +引擎,能否直接嵌入H5页面呢?当然可以。于是采用H5方式...
Android编程中的网络数据上传及WebService调用集,这里面一共包括了5个例子,分别是: AndroidInteractWithWebService 通过网络WebService查询手机号码归属地的小示例 ServerForGETMethod 一些获取数据方法的...
简单的一个Demo,实现了android端调用系统的拍摄功能,拍摄,并将视频文件上传到本地的服务器。 源码里面包括了android的程序,服务器接收的源代码(服务器代码是Myeclipse编辑的,服务器为tomcat6.0)。各位亲们,...
单/多文件上传 断点续传下载 基本回调包含 onSuccess、onError、onCancel、onProgress(上传/下载) 支持自定义Callback 支持https 支持tag取消,也可取消全部 支持链式调用 支持表单格式,String,json格式数据...
1、ANDROID文件系统与应用程序架构 7 1.1、ANDROID 文件系统 7 1.2、ANDROID应用程序架构 9 2、ANDROID应用程序结构 11 2.1、ACTIVITY 12 2.1.1、概述 12 2.1.2、Activity的生命周期 15 2.1.3、Activity 的创建 16 ...
[14本经典Android开发教程] 8 Linux内核阅读心得体会 读核感悟 2 读核感悟 Linux内核启动 内核的生成 2 读核感悟 Linux内核启动 从hello world说起 3 读核感悟 Linux内核启动 BIOS 5 读核感悟 Linux内核启动 setup...