首页 > 代码库 > 使用data:uri上传图片

使用data:uri上传图片

  上传图片的方式有两种,一种是使用传统的html控件的方式,设置form属性为multipart/form-data。这种方式兼容ie6,ie7。另一种方式是使用data:uri,将base64编码从浏览器端post到服务器端,然后利用Base64解码即可。这种方式只是用与比较modern的浏览器,比如ie9,chrome,firefox,safari。本文主要讲讲我们如何利用data:uri的方式上传图片的。

  Data URI 格式 
  data URI的格式非常简单,具体可以看RFC2397,data URI基本的格式如下: 

  data:[<mime type>][;charset=<charset>][;base64],<encoded data> 
  在这个格式中, 

  data: 
  是URI的协议头,表明其资源是一个data URI。第二部分,MIME type,表示数据呈现的格式,对于PNG的图片,其格式是:image/png,如果没有指定,默认的格式是:text/plain。这个character set(字符集)大多数被忽略,如果指定是的数据格式是图片时,字符集将不再使用;下一部分,将表明其数据的编码方式,我们可以不必使用base64编码格式,如果那样,我们将使用标准的URL编码方式(形如%XX%XX%XX的格式);这个encoded data部分,可能包含空格,但是无关紧要。 

  Base 64编码 
  base64是一种编码方式,将数据变成位流(bit stream),然后将其映射到base64的集合内。base64包含A-Z,a-z,自然数以及+,/符号。等号=表明我们需要进行位填充(padding)。 

 

  处理代码:

import java.io.FileOutputStream;import java.io.OutputStream;import sun.misc.BASE64Decoder;/** * to convert base64 string to a image * here we use it to handle data:uri * */public class Base64StringToImage{	public boolean generateImage(String imageStr, String imageFilePath){		if(imageStr == null){			return false;		}		BASE64Decoder decoder = new BASE64Decoder();  		try {  			// Base64 decode			byte[] bytes = decoder.decodeBuffer(imageStr);  			for (int i = 0; i < bytes.length; ++i) {  				if (bytes[i] < 0) {  					bytes[i] += 256;  				}  			}  			// generate image			OutputStream out = new FileOutputStream(imageFilePath);  			out.write(bytes);  			out.flush();  			out.close();  			return true;  		} catch (Exception e) {  			return false;  		}  	}}

  使用data:uri上传方式很简单吧。。