Struts2以base64的方式上传图片
2016-05-11 21:05
477 查看
前言(为什么要用base64)
其实我最初用做测试的图片上传接口接收的参数就直接是<input type="file">
但是要用做手机端的后台,而手机发送的图片是以base64的方式上传的,而且这货不懂这么以file的方式上传,另外考虑到安全性就只好把file方式上传的改成了base64
我这里是使用Java来示范如何上传的,主要是struts2
代码实现
Action类:Upload.javapackage com.action; import com.opensymphony.xwork2.ActionSupport; import com.tool.UploadTool; public class Upload extends ActionSupport { private String base64; public String getBase64() { return base64; } public void setBase64(String base64) { this.base64 = base64; } @Override public String execute() throws Exception { // TODO Auto-generated method stub try { String fileUrl = UploadTool.upload(base64); System.out.println("上传文件路径是:upload/" + fileUrl); } catch(Exception e) { System.out.println(e); } return super.execute(); } }
工具类UploadTool.java
package com.tool; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import sun.misc.BASE64Decoder; /*** * 通过base64字串上传图片的工具类 * @author Slience * */ public class UploadTool { /** * 上传图片 * @param base64 图片编码后的字符串 * @return 上传成功后的文件名 */ public static String upload(String base64) { HttpServletRequest request = ServletActionContext.getRequest(); //upload是图片上传路径 String dir = request.getRealPath("/upload"); File fileLocation = new File(dir); //判断上传路径是否存在,如果不存在就创建 if(!fileLocation.exists()) { boolean isCreated = fileLocation.mkdir(); if(!isCreated) { //目标上传目录创建失败,可做其他处理,例如抛出自定义异常等,一般应该不会出现这种情况。 return null; } } if(base64.indexOf("jpeg") != -1) { //base64字串中有jpeg字串,这是一个4个字的,而我这里是把base64字串的指定位置的字串来作为上传 //文件类型的判断依据,所以在大部分都是三个字的文件类型下就得把jpeg改成jpg了 base64 = base64.replaceFirst("jpeg", "jpg"); } //生成一个唯一的文件名 String upName = UUID.randomUUID().toString()+System.currentTimeMillis()+"."+base64.substring(11, 14); FileOutputStream out; String iconBase64 = base64.substring(22); try { byte[] buffer = new BASE64Decoder().decodeBuffer(iconBase64); out = new FileOutputStream(dir+"/"+upName); out.write(buffer); out.close(); return upName; } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } }
index.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>上传图片</title> </head> <body> <textarea id="base64"></textarea> <input type="button" onclick="upload()" value="上传"> </body> <script type="text/javascript" src="jquery-2.1.0.js"></script> <script type="text/javascript"> function upload() { $.post("<%=basePath%>"+"upload", {base64:$("#base64").val()},function(){ alert("上传成功"); }); } </script> </html>
配置的struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <constant name="struts.devMode" value="true" /> <constant name="struts.multipart.maxSize" value="524288000" /> <!-- 指定全局国际化资源文件 --> <!-- 这里是十八不是L八哈~ value是等下用来测试的一个文件名字(至少目前是用来这样的) --> <!-- <constant name="struts.custom.i18n.resources" value="mess"/> --> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <!-- Add packages here --> <!-- <package name="default" namespace="/" extends="struts-default"> --> <package name="default" namespace="/" extends="struts-default"> <action name="upload" class="com.action.Upload"> <result>index.jsp</result> </action> </package> <!-- <include file="struts-part1.xml"></include> --> </struts>
实现的效果就是在tomcat对应的项目上创建了一个文件夹,里面装着上传的文件
相关文章推荐
- JQuery+Strusts1.x无刷新登录
- java struts常见错误以及原因分析
- Struts之logic标签库详解
- 通过实例深入学习Java的Struts框架中的OGNL表达式使用
- Java的Struts框架中append标签与generator标签的使用
- struts2的select标签用法实例分析
- SSH框架网上商城项目第20战之在线支付平台
- 在Java的Struts框架下进行web编程的入门教程
- 详解Java的Struts框架中注释的用法
- java中struts 框架的实现
- 利用Java的Struts框架实现电子邮件发送功能
- 在Java的Struts框架中ONGL表达式的基础使用入门
- 详解Java的Struts框架中栈值和OGNL的使用
- Java的Struts框架简介与环境配置教程
- Java的Struts框架中的if/else标签使用详解
- 简单说明Java的Struts框架中merge标签的使用方法
- 详解Java的Struts框架中上传文件和客户端验证的实现
- Java的Struts框架中Action的编写与拦截器的使用方法
- sprng和struts有什么区别?
- Java的Struts框架中<results>标签的使用方法