热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

基于标准http实现Android多文件上传

这篇文章主要介绍了基于标准http实现Android多文件上传的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

实现多文件的上传,基于标准的http来实现。

1.多文件上传MyUploader类的实现:

/**
 * 
 * 同步上传多个文件
 * 基于标准的http实现,需要在非UI线程中调用,以免阻塞UI。
 *
 */
public class MyUploader {
 private static final String TAG = "MyUploader";

 // ////////////////////同步上传多个文件/////////
  /**
   * 同步上传File
   * 
   * @param Url
   * @param fullFileName
   *   : 全路径,ex. /sdcard/f/yh.jpg
   * @param fileName
   *   : file name, ex. yh.jpg
   * @return 服务器的响应结果(字符串形式)
   */
  public String MyUploadMultiFileSync(String Url,
    List fileList, Map params) {
   String reulstCode = "";
   String end = "\r\n";
   String twoHyphens = "--";
   String boundary = "--------boundary";

   try {
    URL url = new URL(actionUrl);
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    // 允许Input、Output,不使用Cache
    con.setDoInput(true);
    con.setDoOutput(true);
    con.setUseCaches(false);
    // 设置传送的method=POST
    con.setRequestMethod("POST");
    // setRequestProperty
    con.setRequestProperty("Connection", "Keep-Alive");
    con.setRequestProperty("Charset", "UTF-8");
    // con.setRequestProperty("Content-Type",
    // "application/x-www-form-urlencoded");
    con.setRequestProperty("Content-Type",
      "multipart/form-data;boundary=" + boundary);

    StringBuffer s = new StringBuffer();
    // 设置DataOutputStream
    DataOutputStream dos = new DataOutputStream(con.getOutputStream());

    for (int i = 0; i 

2. 调用方法:

由于MyUploader的MyUploadMultiFileSync本身是同步的函数请求,所以,这个函数需要在非UI线程中执行。本例采用Thread+Handler的方式来进行说明。
下面是activity的主要代码,功能是将cache目录中的的jpg文件上传到指定的服务器:

public void uploadThreadTest() {
  new Thread(new Runnable() {
   @Override
   public void run() {

    try {
     upload();
    } catch (Exception e) {
     e.printStackTrace();
    }
   }

  }).start();

 }

 private void upload() {
  String url = "https://httpbin.org/post";
  List fileList = getCacheFiles();

  if (fileList == null) {
   myHandler.sendEmptyMessage(-1);
  }else {
   MyUploader myUpload = new MyUploader();
   //同步请求,直接返回结果,根据结果来判断是否成功。
   String reulstCode = myUpload.MyUploadMultiFileSync(url, fileList, null);
   Log.i(TAG, "upload reulstCode: " + reulstCode);
   myHandler.sendEmptyMessage(0);

  }
 }

 private List getCacheFiles() {
  List fileList = new ArrayList();
  File catchPath = mContext.getCacheDir();

  if (catchPath!=null && catchPath.isDirectory()) {

   File[] files = catchPath.listFiles();
   if (files == null || files.length<1) {
    return null;
   }
   for (int i = 0; i 

3 项目demo代码地址:https://github.com/ranke/HttpAsyncTest

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • Vue 2 中解决页面刷新和按钮跳转导致导航栏样式失效的问题
    本文介绍了如何通过配置路由的 meta 字段,确保 Vue 2 项目中的导航栏在页面刷新或内部按钮跳转时,始终保持正确的 active 样式。具体实现方法包括设置路由的 meta 属性,并在 HTML 模板中动态绑定类名。 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文基于对相关论文和开源代码的研究,详细介绍了LOAM(激光雷达里程计与建图)的工作原理,并对其关键技术进行了分析。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文介绍如何使用 Sortable.js 库实现元素的拖拽和位置交换功能。Sortable.js 是一个轻量级、无依赖的 JavaScript 库,支持拖拽排序、动画效果和多种插件扩展。通过简单的配置和事件处理,可以轻松实现复杂的功能。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
author-avatar
plumscape_191
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有