当前位置: 首页 > news >正文

什么公司需要网站建设/深圳网站seo哪家快

什么公司需要网站建设,深圳网站seo哪家快,wordpress 为什么要ftp,做动画的动作库网站最近项目上有遇到需要在手机APP端嵌入HTML5页面并选取照片上传,网上有很多方式实现,原本使用了百度的webupload插件,但是需要依赖flash,所以我使用了H5自带的FileReader API来读取文件流转换成base64字符串,然后使用aj…

最近项目上有遇到需要在手机APP端嵌入HTML5页面并选取照片上传,网上有很多方式实现,原本使用了百度的webupload插件,但是需要依赖flash,所以我使用了H5自带的FileReader API来读取文件流转换成base64字符串,然后使用ajax无刷新方式上传到服务器。

HTML5页面编写

.divImg{ border:1px solid #000; width:auto; height:auto;max-width: 100%;max-height: 100%}

.divImg img{width:100px; height:100px}

var imgFiles = null;//用于存放base64字符串的数组

$(function(){

var input = $("#imgFile");

var result,div;

if(typeof FileReader==='undefined'){

input.setAttribute('disabled','disabled');

return alert("抱歉,你的浏览器不支持 FileReader");

}else{

$("#imgFile").bind('change',readFile);

}

function readFile(){

imgFiles = new Array();

for(var i=0;i

var imgName = $("#imgFile").val().toLocaleLowerCase();

if (!imgName.match(/.jpg|.jpeg|.gif|.png|.bmp/i)){  //判断上传文件格式

return alert("上传的图片格式不正确,请重新选择");

}

var reader = new FileReader();

reader.readAsDataURL(this.files[i]);

var picId = 0;

reader.onload = function(e){

imgFiles.push(this.result);//this.result就是图片转换后的base64字符串

result = '

![]('+this.result+')
';

div = document.createElement('div');

div.innerHTML = result;

document.getElementById('body').appendChild(div);//插入dom树

picId++;

}

}

}

$('#btnUpload').bind('click',uploadImg);

$('#btnReset').bind('click',reset);

})

/**

* 上传文件

*/

function uploadImg(){

for(var i=0;i

var base64 = imgFiles[i];

$.ajax({

url : 'http://192.168.1.102:8083/uploadFile',

type : 'post',

contentType: 'application/x-www-form-urlencoded; charset=utf-8',

async: false,

cache: false,

data : base64,

success : function(data){

console.log(data)

var result = JSON.parse(data);

if(result.isSuccess){

alert('第'+(i+1)+'张图片上传成功');

$('#preview'+i).remove();

}else{

alert('第'+(i+1)+'张图片上传失败:'+result.resultDesc);

}

}

})

}

reset();

}

/**

* 重置表单

*/

function reset(){

$('#imgFile').val('');

$('.divImg').each(function(index,domEle){

$(this).remove();

})

}

请选择一个图像文件:

上传图片

重置

服务端处理

后台使用原生的Java Servlet来接收处理

从HttpServletRequest中读取前端传来的InputStream并转换成字符串

/**

* 从HttpServletRequest中读取前端传来的InputStream并转换成base64字符串

*

* @param request

* @return

* @throws Exception

*/

private String getBase64Str(HttpServletRequest request) throws Exception {

try {

String imgStr = getRequestPayload(request);

if (imgStr == null || "".equals(imgStr)) {

return null;

}

/**

* 由于前端转过来的数据格式为data:image/jpeg;base64,图像base64字符串,因此需要处理一下

*/

final String subStr = "base64,";

String base64Str = imgStr.substring(imgStr.indexOf(subStr) + subStr.length(), imgStr.length());

return base64Str;

} catch (Exception ex) {

throw ex;

}

}

/**

* 从Request中读取二进制数据流,并转换成字符串

* @param request

* @return

* @throws Exception

*/

private String getRequestPayload(HttpServletRequest request) throws Exception{

StringBuilder sb = new StringBuilder();

BufferedReader reader = null;

try {

reader = request.getReader();

char[] buff = new char[1024];

int len;

while ((len = reader.read(buff)) != -1) {

sb.append(buff, 0, len);

}

} catch (IOException e) {

throw e;

}finally {

if(reader != null){

reader.close();

}

}

return sb.toString();

}

将base64字符串转换成图片并写入磁盘,最终完整的代码如下

import net.sf.json.JSONObject;

import org.apache.commons.io.IOUtils;

import sun.misc.BASE64Decoder;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.*;

/**

* Created by qianlong on 2017/1/12.

*/

public class FileUploadServlet extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

service(req,resp);

}

public void service(HttpServletRequest req, HttpServletResponse res)

throws IOException, ServletException {

JSONObject result = new JSONObject();

res.setContentType("text/html;charset=UTF-8");

// Create path components to save the file

final String path = "/home/bluecoffee/upload";//保存路径可以从配置文件中读取

final PrintWriter writer = res.getWriter();

try {

String base64Str = this.getBase64Str(req);

if(base64Str == null || base64Str.equals("")){

result.put("isSuccess", false);

result.put("resultDesc", "请选择需要上传的图片");

writer.print(result.toString());

return;

}

System.out.println("base64Str=" + base64Str);

//生成一个新的文件名

String newImgName = path + File.separator + System.currentTimeMillis() + ".jpg";

boolean isWrite = this.writeImage(base64Str, newImgName);

if (isWrite) {

result.put("isSuccess", true);

result.put("resultDesc", "图片上传成功");

writer.print(result.toString());

}else{

result.put("isSuccess", false);

result.put("resultDesc", "写入磁盘文件失败");

writer.print(result.toString());

}

} catch (FileNotFoundException ex) {

ex.printStackTrace();

result.put("isSuccess", false);

result.put("resultDesc", "图片不存在:"+ex);

writer.print(result.toString());

} catch (Exception ex){

ex.printStackTrace();

result.put("isSuccess", false);

result.put("resultDesc", "图片上传失败:"+ex);

writer.print(result.toString());

}

}

/**

* 从HttpServletRequest中读取前端传来的InputStream并转换成真正的图片base64字符串

*

* @param request

* @return

* @throws Exception

*/

private String getBase64Str(HttpServletRequest request) throws Exception {

try {

String imgStr = getRequestPayload(request);

if (imgStr == null || "".equals(imgStr)) {

return null;

}

/**

* 由于前端转过来的数据格式为data:image/jpeg;base64,图像base64字符串,因此需要处理一下

*/

final String subStr = "base64,";

String base64Str = imgStr.substring(imgStr.indexOf(subStr) + subStr.length(), imgStr.length());

return base64Str;

} catch (Exception ex) {

throw ex;

}

}

/**

* 从Request中读取二进制数据流,并转换成字符串

* @param request

* @return

* @throws Exception

*/

private String getRequestPayload(HttpServletRequest request) throws Exception{

StringBuilder sb = new StringBuilder();

BufferedReader reader = null;

try {

reader = request.getReader();

char[] buff = new char[1024];

int len;

while ((len = reader.read(buff)) != -1) {

sb.append(buff, 0, len);

}

} catch (IOException e) {

throw e;

}finally {

if(reader != null){

reader.close();

}

}

return sb.toString();

}

/**

* 将base64字符串转换成图片并按新文件名写入磁盘,

* @param base64Str

* @param newImgName

* @return

* @throws Exception

*/

private boolean writeImage(String base64Str, String newImgName) throws Exception {

if (base64Str == null) // 图像数据为空

return false;

BASE64Decoder decoder = new BASE64Decoder();

OutputStream out = null;

try {

// Base64解码

byte[] bytes = decoder.decodeBuffer(base64Str);

for (int i = 0; i < bytes.length; ++i) {

if (bytes[i] < 0) {// 调整异常数据

bytes[i] += 256;

}

}

//将图片写入磁盘

out = new FileOutputStream(newImgName);

out.write(bytes);

return true;

} catch (Exception e) {

return false;

} finally {

if (out != null) {

out.flush();

out.close();

}

}

}

}

web.xml中配置

FileUploadServlet

com.bluecoffee.web.servlets.FileUploadServlet

FileUploadServlet

/pc/uploadFile

FileUploadServlet

/phone/uploadFile

小结

该示例在iPhone的safari浏览器、小米手机的浏览器测试过,还需要在更多移动端测试。下一步准备加入在移动端压缩base64数据,提高传输效率。

http://www.lbrq.cn/news/1264789.html

相关文章:

  • 山东兴润建设有限公司网站/南京怎样优化关键词排名
  • 省建设厅网站安徽/百度大数据查询
  • 景区门户网站建设/湖南seo优化首选
  • 武汉洪山区做网站的公司/痘痘如何去除效果好
  • 浙江+外贸网站建设/电商网络营销
  • 网站与域名的关系/百度榜单
  • 网站做担保交易/b站视频推广网站
  • 做网站不需要原件吧/百度免费推广有哪些方式
  • 做电子商务网站需要什么手续/网站制作多少钱一个
  • 响水做网站的价格/搜索引擎关键词优化方案
  • 网站app在线制作/优化流程
  • 网站建设链接/互联网营销做什么
  • 手机端网站建设方案/什么平台打广告比较好免费的
  • 网站后台操作流程/小红书怎么推广
  • 个人网站介绍模板/提高工作效率的句子
  • 行业门户网站大全/免费推广网站2024
  • 怎么用asp做网站/公众号怎么做文章推广
  • 加盟营销型网站建设/最新收录查询
  • 网站开发市场情况/百度域名收录提交入口
  • 企业网站可以自己做吗/关键词排名优化网站
  • 网站添加漂浮二维码怎么做/市场营销推广策划方案
  • 黄岛网站建设/seo入门教学
  • 深圳建设网站过程/强化防疫指导
  • 男人女人做那个网站/武汉关键词包年推广
  • 北京网站建设有哪些公司/自己做一个网站需要多少钱
  • 手机建站网/优化网站有哪些方法
  • 个人网站可以做资讯吗/网络营销案例题
  • 北京商城网站开发/最近的重大新闻
  • 互联网网站建设是什么/福州百度首页优化
  • 临朐网站制作/网站维护费用
  • 线程锁-互斥、自旋、读写、原子操作、线程池
  • Python篇---环境变量软件安装
  • 前后端交流
  • SpringBoot3.x入门到精通系列:2.5 整合 MyBatis 详解
  • kong网关集成Safeline WAF 插件
  • 数据结构初学习、单向链表