android/IOS常用图片上传的两种方式:
1、上传到服务器的文件服务器(FileServer)
原理:上传到文件服务器的方式是先在服务器端搭建文件服务器,配置好路径(url),该路径是我们待会上传图片的路径,配置成功后便通过http+post的模式上传到文件服务器,同时文件服务器将返回一个图片ID,这个ID就是图片的唯一标识,并将该ID写入数据库保存,当需要下载该图片时只需要将此ID带上即可。
两个核心问题:
(1)服务端:配置FileServer,并写处理响应上传图片的代码,这个值得去网上研究研究;
(2)客服端:写Http上传文件的代码,我贴一下上传核心代码:
/** public void uploadForm(Map<String, String> params, String fileFormName, StringBuilder sb = new StringBuilder(); byte[] headerInfo = sb.toString().getBytes("UTF-8"); OutputStream out = conn.getOutputStream(); out.write(endInfo); } |
这里的 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; } } |
就这样两种上传图片的方式就结束了,当然第一种我是重点讲了一下原理,配置服务端的没有详细的给出,这块我想是值得我们去研究研究的,有共同需求的可以一起交流,研究,分享。