优秀的编程知识分享平台

网站首页 > 技术文章 正文

html5复制黏贴上传图片(html5复制黏贴上传图片怎么弄)

nanyue 2024-08-01 22:50:35 技术文章 6 ℃

今天在博客中加了个新的功能,直接复制图片然后黏贴上传到服务器。

之前是自己弄的markdown编辑器,很多功能不完善,刚开始加了个插入图片的按钮,现在能直接复制图片方便多了。

目前只支持chrome浏览器,哈哈,感觉chrome是最好用的浏览器。

主要原理是利用paste事件,然后拿到里面的图片数据上传到服务器。

下面贴代码

<textarea id="content" />

有个编辑的文本框,然后监听parse事件

document.querySelector('#content').addEventListener('paste', function(event) {

var isChrome = false;

if (event.clipboardData || event.originalEvent) {

//not for ie11 某些chrome版本使用的是event.originalEvent

var clipboardData = (event.clipboardData || event.originalEvent.clipboardData);

if (clipboardData.items) {

// for chrome

var items = clipboardData.items, len = items.length, blob = null;

isChrome = true;

for (var i = 0; i < len; i++) {

if (items[i].type.indexOf("image") !== -1) {

//getAsFile() 此方法只是living standard firefox ie11 并不支持

blob = items[i].getAsFile();

}

}

if (blob !== null) {

//阻止默认行为即不让剪贴板内容在编辑框中显示出来

event.preventDefault();

var reader = new FileReader();

reader.onload = function(event) {

// event.target.result 即为图片的Base64编码字符串

var base64_str = event.target.result

uploadImgFromPaste(base64_str);

}

reader.readAsDataURL(blob);

}

}

}

});

上传图片,file就是图片的base64之后的数据

function uploadImgFromPaste(file) {

$.ajax({

type : 'POST',

url : basePath + '/image/copyupload',

data : {

imageContent : file

},

dataType : "json",

success : function(ret) {

}

},

error : function() {

layer.msg("异常!");

}

});

}

后台我们可以接收到图片的base64字符串,然后写成图片

// base64字符串转化成图片

public static boolean GenerateImage(String imgStr) {

BASE64Decoder decoder = new BASE64Decoder();

try {

// Base64解码

byte[] b = decoder.decodeBuffer(imgStr);

// 生成jpeg图片

String imgFilePath = "/Users/yinjihuan/Downloads/test22.png";// 新生成的图片

OutputStream out = new FileOutputStream(imgFilePath);

out.write(b);

out.flush();

out.close();

returntrue;

} catch (Exception e) {

returnfalse;

}

}

我这边是直接将数据写到mongodb的gridfs中

@ResponseBody

@RequestMapping(value = "/image/copyupload")

public Object uploadParseImage(String imageContent, HttpServletRequest request) {

try {

imageContent = imageContent.substring(imageContent.indexOf("base64")+7);

Integer userId = ArticleController.getLoginUserId(request);

if(userId == null) returnnull;

BASE64Decoder decoder = new BASE64Decoder();

// Base64解码

byte[] b = decoder.decodeBuffer(imageContent);

InputStream content = new ByteArrayInputStream(b);

FileVo fileVo = new FileVo("copy.png", "image/png", content,

new BasicDBObject("user_id", userId).append("use", "blog"));

String fileId = filesService.saveFile(fileVo);

Map<String, Object> map = new HashMap<String, Object>();

map.put("success", true);

map.put("fileId", fileId);

returnmap;

} catch (Exception e) {

e.printStackTrace();

return JsonUtils.getJsonError("",e.getMessage());

}

}

Tags:

最近发表
标签列表