android/IOS常用图片上传的两种方式

android/IOS常用图片上传的两种方式:

1、上传到服务器的文件服务器(FileServer)

原理:上传到文件服务器的方式是先在服务器端搭建文件服务器,配置好路径(url),该路径是我们待会上传图片的路径,配置成功后便通过http+post的模式上传到文件服务器,同时文件服务器将返回一个图片ID,这个ID就是图片的唯一标识,并将该ID写入数据库保存,当需要下载该图片时只需要将此ID带上即可。

两个核心问题:

(1)服务端:配置FileServer,并写处理响应上传图片的代码,这个值得去网上研究研究;

(2)客服端:写Http上传文件的代码,我贴一下上传核心代码:


/**
  *
  * @param params
  *            传递的普通参数
  * @param uploadFile
  *            需要上传的文件名
  * @param fileFormName
  *            需要上传文件表单中的名字
  * @param newFileName
  *            上传的文件名称,不填写将为uploadFile的名称
  * @param urlStr
  *            上传的服务器的路径
  * @throws IOException
  */

public void uploadForm(Map<String, String> params, String fileFormName,
   File uploadFile, String newFileName, String urlStr, Context mContext)
   throws IOException {
  if (newFileName == null || newFileName.trim().equals("")) {
   newFileName = uploadFile.getName();
  }

StringBuilder sb = new StringBuilder();
  /**
   * 普通的表单数据
   */
  if (params != null)
   for (String key : params.keySet()) {
    sb.append("--" + BOUNDARY + "\r\n");
    sb.append("Content-Disposition: form-data; name=\"" + key
      + "\"" + "\r\n");
    sb.append("\r\n");
    sb.append(params.get(key) + "\r\n");
   }
  /**
   * 上传文件的头
   */
  sb.append("--" + BOUNDARY + "\r\n");
  sb.append("Content-Disposition: form-data; name=\"" + fileFormName
    + "\"; filename=\"" + newFileName + "\"" + "\r\n");
  sb.append("Content-Type: image/jpeg" + "\r\n");// 如果服务器端有文件类型的校验,必须明确指定ContentType
  sb.append("\r\n");

byte[] headerInfo = sb.toString().getBytes("UTF-8");
  byte[] endInfo = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("UTF-8");
  System.out.println(sb.toString());
  URL url = new URL(urlStr);
  HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  conn.setRequestMethod("POST");
  conn.setRequestProperty("Content-Type",
    "multipart/form-data; boundary=" + BOUNDARY);
  conn.setRequestProperty(
    "Content-Length",
    String.valueOf(headerInfo.length + uploadFile.length()
      + endInfo.length));
  conn.setDoOutput(true);

OutputStream out = conn.getOutputStream();
  InputStream in = new FileInputStream(uploadFile);
  /**文件总大小**/
  onUploadProcessListener.initUpload((int)uploadFile.length());
  out.write(headerInfo);
  byte[] buf = new byte[1024];
  int len;
  int curLen = 0; //当前长度
  while ((len = in.read(buf)) != -1){
   out.write(buf, 0, len);
   curLen += len;
   /**上传进度值的大小**/
   onUploadProcessListener.onUploadProcess(curLen);
  }

out.write(endInfo);
  in.close();
  out.close();
  String result = "";
  int code = conn.getResponseCode();
  if (code == 200) {
   System.out.println("上传成功");
   InputStream input = conn.getInputStream();
   StringBuffer sb1 = new StringBuffer();
   int ss;
   while ((ss = input.read()) != -1) {
    sb1.append((char) ss);
   }
   result = sb1.toString();
   // 回调方法
   sendMessage(1, result);
   
   saveUploadFile(mContext, result);
  }
  Toast.makeText(mContext, "上传后返回的结果:" + result, 100).show();

}

这里的 result就是返回的图片ID,代码自己去看看,是模拟浏览器的模式上传的,如果不太明白的可以先了解一下浏览器的post模式。

2、上传到服务器的数据库

原理:这个原理很简单,就是将图片用base64的方式加密后以参数的形式上传到服务器并直接写入数据库,需要用的时候直接获取这个字段并解密即可。

base64加密:


byte[] bPic = Tools.Bitmap2Bytes(bitmap);

String mSkinImage = Base64Helper.encode(bPic);

http+post+para上传


List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();

pairs.add(new BasicNameValuePair("SkinImage",mSkinImage));

//这里是上传

HttpHelper.getDataEncyption(Tools.getReqUrl(), pairs, mHandler);

这种方式上传成功后就直接插入数据库了,我再贴出base64的加密和解密代码:

public class Base64Helper {
    /**
     * 编码加密
     * @param byteArray
     * @return
     */ 
       public static String encode(byte[] byteArray) { 
           return new String(Base64.encodeToString(byteArray, Base64.DEFAULT)); 
       } 
      
       /**
        * 解码-解密
        * @param base64EncodedString
        * @return
        */ 
       public static byte[] decode(String base64EncodedString) {
        byte[] bb = null;
  try {
   bb = Base64.decode(base64EncodedString, Base64.DEFAULT);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
        return bb; 
       } 
      
}

就这样两种上传图片的方式就结束了,当然第一种我是重点讲了一下原理,配置服务端的没有详细的给出,这块我想是值得我们去研究研究的,有共同需求的可以一起交流,研究,分享。

android/IOS常用图片上传的两种方式

时间: 2024-10-10 07:50:41

android/IOS常用图片上传的两种方式的相关文章

图片上传的两种形式

很早以前的单应用项目上传图片都是很简单的,上传图片后在controller层设置路径并且保存到服务器的某个路径下就行了,数据库中存储路径地址,最后在tomcat中设置一个虚拟路径就行了,很多年以前大多都是这么做的. 然而随着技术的更新迭代,SOA,微服务,这样的做法是会被淘汰的,如果是分布式部署或者集群环境,上传文件到各自的服务器上去,是无法做到统一的,那么就要用到图片服务器,之前我有提过fastdfs,这个是一个非常好用的文件服务器,这里不多说了.各个项目上传的图片都统一由文件服务器来管理,那

利用Selenium实现图片文件上传的两种方式介绍

在实现UI自动化测试过程中,有一类需求是实现图片上传,这种需求根据开发的实现方式,UI的实现方式也会不同. 一.直接利用Selenium实现 这种方式是最简单的一种实现方式,但是依赖于开发的实现. 当开发直接使用file类型的input实现图片文件的上传时,实例:<input type="file" name=''filename"> 我们可以直接利用Selenium提供的方法实现文件上传,但是因为依赖开发的实现,而且目前实现基本都会利用框架,所以这种实现方式有很

SpringMVC文件上传的两种方式

搞JavaWEB的应该或多或少都做过文件上传,之前也做过简单的上传,但是如下的需求也确实把我为难了一把: 1.上传需要异步, 2.需要把上传后文件的地址返回来, 3.需要进度条显示上传进度. 项目使用SpringMVC架构+easyUI,初步分析,进度条可以使用easyui自带的进度条,上传可以使用ajaxFileUpload或者ajaxForm.文件传上去,然后把路径带回来是没问题的,关键是上传进度怎么获取.最终,两种方式都实现啦. 首先,不管哪种方式,后台对文件处理都是必须的.文件处理: 1

JavaWeb图片上传的几种方式

一.图片上传介绍 JavaWeb方向编程过程中,实现图片上传有三种方式: 1.传统的基于springMVC的MultipartFile类实现图片上传. 2.基于Ajax的图片上传. 3.基于Base64压缩的图片上传. 二.springMVC图片上传(springboot通用) 此方法的优点是可以将图片和其他的表单元素一起提交到服务器,服务器接受到的图片其实已经存储于容器的临时文件中,进行文件拷贝工作比较简单. 缺点是无法及时看到图片上传的预览效果,图片一旦选择错误只能重新提交. 注:红色代码为

iOS:图片上传时两种图片压缩方式的比较

上传图片不全面的想法:把图片保存到本地,然后把图片的路径上传到服务器,最后又由服务器把路径返回,这种方式不具有扩展性,如果用户换了手机,那么新手机的沙盒中就没有服务器返回的图片路径了,此时就无法获取之前已经上传了的头像了,在项目中明显的不可行. 上传图片的正确方式:上传头像到服务器一般是将图片NSData上传到服务器,服务器返回一个图片NSString地址,之后再将NSString的路径转为url并通过url请求去更新用户头像(用户头像此时更新的便是NSString) 代码为: AFHTTPRe

配置Spring项目上传的两种方式(全解析)

欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝的角度去观察(了解)Java体系.使Java的各种后端技术在你心中模块化:让你在工作中能将Java各个技术了然于心:能够即插即用.本章我们来一起了解Spring的文件上传全解析. 首先对于Spring的文件上传,我们仅仅需要关注三点 Spring需要具备解析Multipart能力 前端需要文件转换为

ASP.NET Core 1.0中实现文件上传的两种方式(提交表单和采用AJAX)

Bipin Joshi (http://www.binaryintellect.net/articles/f1cee257-378a-42c1-9f2f-075a3aed1d98.aspx) Uploading files is a common requirement in web applications. In ASP.NET Core 1.0 uploading files and saving them on the server is quite easy. To that end

Java文件上传的几种方式

文件上传与文件上传一样重要.在Java中,要实现文件上传,可以有两种方式: 1.通过Servlet类上传 2.通过Struts框架实现上传 这两种方式的根本还是通过Servlet进行IO流的操作. 一.通过Servlet类上传 1.编写Sevlet类 package com.chanshuyi.upload; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.

转载:Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式

Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式 出自:http://www.cnblogs.com/top5/archive/2012/08/04/2623464.html 关于AS3加载图片等外部资源,我常用的有两种方式:Loader和Embed,各自的特点,总结如下: Embed:在Flash编译阶段就将资源嵌入,也就是说图片资源是会被编译进swf文件里面去的:这样子的好处是代码比较简洁,使用方便,也不存在加载顺序的问题,缺点是会增大swf文件的体积 Loader:在