您的位置:首页 > 编程语言 > Java开发

Struts2以base64的方式上传图片

2016-05-11 21:05 477 查看

前言(为什么要用base64)

其实我最初用做测试的图片上传接口接收的参数就直接是

<input type="file">


但是要用做手机端的后台,而手机发送的图片是以base64的方式上传的,而且这货不懂这么以file的方式上传,另外考虑到安全性就只好把file方式上传的改成了base64

我这里是使用Java来示范如何上传的,主要是struts2

代码实现

Action类:Upload.java

package 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对应的项目上创建了一个文件夹,里面装着上传的文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts