使用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上传方式很简单吧。。

使用data:uri上传图片

时间: 2024-12-12 00:24:22

使用data:uri上传图片的相关文章

data uri

Data URI 科普 笔者对本文的定位是实践操作型,所以一些理论基础只点到为止.首先 Data URI 是什么? 引用 Wikipedia 上对其的解释: Data URI 是一种提供让外置资源的直接内嵌在页面中的方案.这种技术允许我们只需单次 HTTP 请求即可获取所有需要引用的图片与样式资源, 并因无需多次请求资源而变的高效. 在 RFC2397(http://tools.ietf.org/html/rfc2397)中定义了它格式规范: data:[<mime type>][;chars

Data URI(转)

Data URL 早在 1995 年就被提出,那个时候有很多个版本的 Data URL Schema 定义陆续出现在 VRML 之中,随后不久,其中的一个版本被提上了议案——将它做个一个嵌入式的资源放置在 HTML 语言之中.从 RFC 文档定稿的时间来看(1998年),它是一个很受欢迎的发明. Data URIs 定义的内容可以作为小文件被插入到其他文档之中.URI 是 uniform resource identifier 的缩写,它定义了接受内容的协议以及附带的相关内容,如果附带的相关内容

JS魔法堂:Data URI Scheme介绍

一.前言 上周五公司内部的Any Topic Conf.上我和同事们分享了这个主题,有同事说这个有用,有同事说这个没啥用,后来还延伸到网站性能的话题上,大家讨论的激烈程度让我觉得这次选题还不错.本篇先不管到底有用与否,仅仅记录理论知识.也希望大家一起来分享实战经验啊! 二.从HTTP URI Scheme入手 对于 <a href="http://github.com">HTTP URI Scheme</a> 我想大家都应该很熟悉了,href属性值http://

Data URI scheme - 数据的uri模式

----------------------------------------------------------------------------------------------- Data URI scheme is a URI scheme(统一资源定位符的模式). 我们熟知的站点引用资源文件,都是类似http://www.chenwei.ws/demo.png这种的格式,但是data URI scheme 提供将外部资源嵌入到网页中的方法. 它是一种文件或文档的形式,这项技术允许

浅谈 Data URI 与 BASE 64 编码

前言(废话):鼓捣 Stylish 的时候发现了这么个奇怪的代码行: Data:image/gif;BASE64,R0lGODlhEAAQAKEAAEKF9NPi/AAAAAAAACH5BAEAAAIALAAAAAAQABAAAAIkFI6Zpu0YYnxnAvtC0hTzzH3UJY6kSUqdiCltu7GjBKMKgwoFADs= 由于自己有点 HTML/CSS 基础,看得出来这是在引用图片,可是后面这么长一串乱码难道就是图片地址吗?经过漫长的查询(突破点是 BASE64,我记得这是种加密

Data URI Scheme,base64

一.从HTTP URI Scheme入手 对于 <a href="http://github.com">HTTP URI Scheme</a> 我想大家都应该很熟悉了,href属性值http://github.com就是HTTP URI Scheme,那么什么是DATA URI Scheme呢?其实就是形如data:text/jpeg;base64,XINGSXXIANGJIJIGSAG==的资源链接,一般出现在img元素的src属性. DATA URI Sch

data URI scheme及其应用

data URI scheme通俗的来讲就是将一张图片直接塞到HTML中而不是通过HTTP请求去获取.这样从表面上看会减少一次HTTP的请求,实现了对于网页的优化(不过看了其他一些文章data URI因为将图片采用了base 64的编码方式进行表达,所以还是需要进行HTTP去下载内容,而且这样的渲染方式同时也加大了内存,cpu等等的压力,因此选择的时候需要进行性能方面的权衡). 比如一张图片用http请求方式进行请求并且显示的方法: <img src="http://sjolzy.cn/i

【转】Data URL和图片,及Data URI的利弊

Data URL给了我们一种很巧妙的将图片“嵌入”到HTML中的方法.跟传统的用img标记将服务器上的图片引用到页面中的方式不一样,在Data URL协议中,图片被转换成base64编码的字符串形式,并存储在URL中,冠以mime-type.本文中,我将介绍如何巧妙的使用Data URL优化网站加载速度和执行效率. 观看演示 1. Data URL基本原理 图片在网页中的使用方法通常是下面这种利用img标记的形式: Html代码   <img src="images/myimage.gif

php://input,php://filter,data URI schema的那些事

一.php://input一句话木马 在调研dedecms的历史漏洞时,发现了dedecms安装文件曾经出过被植入后门的漏洞(SSV-ID站点include目录下shopcar.class.php文件被植入一句话木马) @eval(file_get_contents('php://input')) 我是个十足的php菜鸟,只有用到的时候才会去查查语法书,对php://input也只是有点印象而已,于是用脚本phpinput.php,配合firefox Hackbar插件测试了一下php://in