Android要实现文件上传,可以利用Socket上传,也可以模拟Web进行上传,但是如果是使用第一种方式上传,严格的话就得使用TCP,这样容易生成系统死掉,或者是长时间等待,如果是UDP来传,就容易造成数据丢失,因此在这里选择了Web进行上传,使用Web进行上传是模拟的Http Post上传数据,当然,Post上传数据的类,在网上找了一找,方式虽然很多,但是没有一个感觉是我所使用的,所以参照原理之类的,进行了一下修改,算是做了一个参考。并且利用这个类完成了文件和表彰的上传服务。

上传方法一:

public void uploadFile(){

String name=URLEncoder.encode(text1.getText().toString(),"utf-8");

String pass=URLEncoder.encode(text2.getText().toString(),"utf-8");

Map params = new HashMap();

params.put("NAME", name);

params.put("PASSWORD", pass);

post("http://192.168.1.120/dev/index.php/Device/UploadFile?filename=111&filetype=IMAGE", params, upfiles);

}

Map upfiles = new HashMap();

void getFile() {

File file = new File("/sdcard/");

File[] files = file.listFiles(new fileFilter());

for (File f: files) {

upfiles.put(f.getName(), new File("/sdcard/"+f.getName()));

}

//  Toast.makeText(this, filename, Toast.LENGTH_LONG).show();

}

class fileFilter implements FilenameFilter {

@Override

public boolean accept(File dir, String filename) {

return filename.endsWith(".mp3");

}

}

// 上传代码,第一个参数,为要使用的URL,第二个参数,为表单内容,第三个参数为要上传的文件,可以上传多个文件,这根据需要页定

public static boolean post(String actionUrl,Map params,Map files) throws IOException {

String BOUNDARY = java.util.UUID.randomUUID().toString();

String PREFIX = "--", LINEND = "\r\n";

String MULTIPART_FROM_DATA = "multipart/form-data";

String CHARSET = "UTF-8";

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"); // Post方式

conn.setRequestProperty("connection", "keep-alive");

conn.setRequestProperty("Charsert", "UTF-8");

conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA

+ ";boundary=" + BOUNDARY);

// 首先组拼文本类型的参数

StringBuilder sb = new StringBuilder();

for (Map.Entry entry : params.entrySet()) {

sb.append(PREFIX);

sb.append(BOUNDARY);

sb.append(LINEND);

sb.append("Content-Disposition: form-data; name=\""

+ entry.getKey() + "\"" + LINEND);

sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);

sb.append("Content-Transfer-Encoding: 8bit" + LINEND);

sb.append(LINEND);

sb.append(entry.getValue());

sb.append(LINEND);

}

DataOutputStream outStream = new DataOutputStream(

conn.getOutputStream());

outStream.write(sb.toString().getBytes());

// 发送文件数据

if (files != null)

for (Map.Entry file : files.entrySet()) {

StringBuilder sb1 = new StringBuilder();

sb1.append(PREFIX);

sb1.append(BOUNDARY);

sb1.append(LINEND);

sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""

+ file.getKey() + "\"" + LINEND);

sb1.append("Content-Type: multipart/form-data; charset="

+ CHARSET + LINEND);

sb1.append(LINEND);

outStream.write(sb1.toString().getBytes());

InputStream is = new FileInputStream(file.getValue());

byte[] buffer = new byte[1024];

int len = 0;

while ((len = is.read(buffer)) != -1) {

outStream.write(buffer, 0, len);

}

is.close();

outStream.write(LINEND.getBytes());

}

// 请求结束标志

byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();

outStream.write(end_data);

outStream.flush();

// 得到响应码

boolean success = conn.getResponseCode()==200;

InputStream in = conn.getInputStream();

InputStreamReader isReader = new InputStreamReader(in);

BufferedReader bufReader = new BufferedReader(isReader);

String line = null;

String data = "getResult=";

while ((line = bufReader.readLine()) != null)

data += line;

outStream.close();

conn.disconnect();

return success;

}

上传方法二:

final String ENCORDING="UTF-8";

public boolean upload(String filepath) throws Exception {

String boundary = "---------------------------7db1c523809b2";//+java.util.UUID.randomUUID().toString();//

// 分割线

File file = new File(filepath);

String fileName=new String("哈哈嗨".getBytes(),"ISO-8859-1");

// 用来解析主机名和端口

URL url = new URL("http://192.168.1.120/dev/index.php/Device/UploadFile?filename="+fileName+"&filetype=IMAGE");

// 用来开启连接

StringBuilder sb = new StringBuilder();

// 用来拼装请求

/*// username字段

sb.append("--" + boundary + "\r\n");

sb.append("Content-Disposition: form-data; name=\"username\"" + "\r\n");

sb.append("\r\n");

sb.append(username + "\r\n");

// password字段

sb.append("--" + boundary + "\r\n");

sb.append("Content-Disposition: form-data; name=\"password\"" + "\r\n");

sb.append("\r\n");

sb.append(password + "\r\n");*/

// 文件部分

sb.append("--" + boundary + "\r\n");

sb.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + filepath + "\"" + "\r\n");

sb.append("Content-Type: application/octet-stream" + "\r\n");

sb.append("\r\n");

// 将开头和结尾部分转为字节数组,因为设置Content-Type时长度是字节长度

byte[] before = sb.toString().getBytes(ENCORDING);

byte[] after = ("\r\n--" + boundary + "--\r\n").getBytes(ENCORDING);

// 打开连接, 设置请求头

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout(10000);

conn.setRequestMethod("POST");

conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

conn.setRequestProperty("Content-Length", before.length + file.length() + after.length + "");

conn.setDoOutput(true);

conn.setDoInput(true);

// 获取输入输出流

OutputStream out = conn.getOutputStream();

FileInputStream fis = new FileInputStream(file);

// 将开头部分写出

out.write(before);

// 写出文件数据

byte[] buf = new byte[1024*5];

int len;

while ((len = fis.read(buf)) != -1)

out.write(buf, 0, len);

// 将结尾部分写出

out.write(after);

InputStream in = conn.getInputStream();

InputStreamReader isReader = new InputStreamReader(in);

BufferedReader bufReader = new BufferedReader(isReader);

String line = null;

String data = "getResult=";

while ((line = bufReader.readLine()) != null)

data += line;

Log.e("fromServer", "result="+data);

boolean sucess=conn.getResponseCode() == 200;

in.close();

fis.close();

out.close();

conn.disconnect();

return sucess;

}

通过此代码就可以实现将内容保存到SD卡等设备上,当然要使用网络,必须得有网络的访问权限。这个需要自己添加,在这里不再添加!

android上传字符串到服务器,Android上传文件到服务器相关推荐

  1. js文件 本地 上传服务器地址,js 本地文件同步服务器地址

    js 本地文件同步服务器地址 内容精选 换一换 用户可以将本地NAS存储中的数据,通过云专线迁移至云上SFS Turbo文件系统中,进行云上业务拓展.此方案通过在云上创建一台Linux操作系统的云服务 ...

  2. 服务器皮肤在哪个文件里,服务器怎么使用皮肤

    服务器怎么使用皮肤 内容精选 换一换 在使用云服务器备份制作的整机镜像创建弹性云服务器时,创建速度很慢,或者界面提示用户:该镜像不支持快速创建云服务器功能.CSBS服务早期提供的老备份格式无法支持快速 ...

  3. 服务器怎么打开数据库文件夹,服务器怎么打开数据库文件夹下

    服务器怎么打开数据库文件夹下 内容精选 换一换 GaussDB(for MySQL)全兼容MySQL协议,因此,连接GaussDB(for MySQL)实例目前有两种方式:普通连接和SSL连接.其中, ...

  4. 云服务器centos登录日志文件,云服务器centos登录日志文件

    云服务器centos登录日志文件 内容精选 换一换 提供多个业务节点提供共享的日志输出目录,方便分布式应用的日志收集和管理.业务特点:多个业务主机挂载同一个共享文件系统,并发打印日志.大文件小I/O: ...

  5. 服务器不知道循环生成文件,Windows服务器下PowerShell命令往服务器共享文件夹进行文件拷贝、循环文件重命名...

    由于项目需要,接触到了PowerShell命令,但是苦于以前没有接触过,几句话的代码百度搜索了很长时间. 主要功能是Windows服务器下利用PowerShell命令实现文件拷贝.文件重命名(去掉文件 ...

  6. 服务器本地打开asp文件路径,服务器本地打开asp文件

    服务器本地打开asp文件 内容精选 换一换 本节操作指导您完成Windows操作系统云服务器磁盘空间清理.弹性云服务器匀出一部分磁盘空间来充当内存使用,当内存耗尽时,云服务器可以使用虚拟内存来缓解内存 ...

  7. 文件如何自动上传到服务器,ftp如何自动上传文件到服务器

    ftp如何自动上传文件到服务器 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. ...

  8. 服务器可以储存多久文件,云服务器储存文件

    云服务器储存文件 内容精选 换一换 设置"云服务器名称".名称可自定义,但需符合命名规则:只能由中文字符.英文字母.数字及"_"."-".& ...

  9. 服务器c盘清理文件,云服务器c盘满了怎么清理

    云服务器c盘满了怎么清理 内容精选 换一换 当您购买的弹性云服务器规格无法满足业务需要时,可参考本章节变更规格,升级vCPU.内存.对于部分类型的弹性云服务器,您还可以在变更规格时,更换弹性云服务器的 ...

  10. 服务器获取本地mac文件,获取服务器mac地址

    获取服务器mac地址 内容精选 换一换 虚拟IP地址用于为网卡提供第二个IP地址,同时支持与多个弹性云服务器的网卡绑定,从而实现多个弹性云服务器之间的高可用性.该接口用于给云服务器网卡配置虚拟IP地址 ...

最新文章

  1. 求解最大公约数算法(包含四种方法)
  2. 微软职位内部推荐-Principal Development Lead
  3. gimp and screenshot
  4. BFS--常用模板及实际应用
  5. 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'Address'中的标识列指
  6. Java知识积累——参数个数可变的函数(Varargs)
  7. Fortan写出数据到CSV文件中
  8. mac 禁止adobe creative cloud自启动
  9. Lucene 深入学习(3)Lucene索引初识
  10. Android之HttpURLConnection应用实例:武大教务系统获取课表
  11. python针对Excel表格的操作
  12. springboot房屋租赁合同报修系统java-ssm
  13. Seventh season twenty-first episode,Monica and Chandler both did not know how to write their vows???
  14. GitLab 安全漏洞 (CVE-2016-4340)复现
  15. Unknown column 'xxxx' in 'field list'
  16. 单片机c语言p1口转弯灯实验,单片机p1口转弯灯实验程序
  17. 网页dom元素过多为什么会导致页面卡顿
  18. MAC中的撤销回退快捷键
  19. ARM处理器体系结构总结
  20. Cassandra - A Decentralized Structured Storage System

热门文章

  1. RK3568平台开发系列讲解(环境篇)瑞芯微RK3568亮点介绍
  2. 截流式合流制设计流量计算_2016合流制排水管设计与计算.ppt
  3. 2003文件服务器配置,win2003文件服务器配置
  4. nodejs个人健康信息管理系统Vue前端源码介绍
  5. 三网手机号实名认证查询
  6. php 雪花算法问题
  7. TF2的目标检测API
  8. Android通知栏和服务相关知识
  9. 三电平变频调速系统matlab仿真,矢量变频调速系统仿真研究
  10. Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发