您的位置:首页 > Web前端 > JavaScript

利用SmartUpload+servlet上传图片文字,上传显示图片,解决乱码问题

2016-04-11 00:00 796 查看
摘要: 利用SmartUpload+servlet上传图片文字,并用json输出图片网址+标签内容

1.首先需要一个SmartUploa的jar包+一个json的包(源码包里 面有)

2.jsp页面代码

<%@ page language="java" import="java.util.*" 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">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

</head>
<script>
function setImagePreview(pic) {

var docObj = document.getElementById(pic);
switch (pic) {
case 1:
var imgObjPreview = document.getElementById(preview);
break;
case 2:
var imgObjPreview = document.getElementById(preview1);
break;
default:
var imgObjPreview = document.getElementById(preview2);
}
if (docObj.files && docObj.files[0]) {
//火狐下,直接设img属性
imgObjPreview.style.display = 'block';
imgObjPreview.style.width = '300px';
imgObjPreview.style.height = '120px';
//imgObjPreview.src = docObj.files[0].getAsDataURL();
imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
} else {
//IE下,使用滤镜
docObj.select();
var imgSrc = document.selection.createRange().text;
var localImagId = document.getElementById("localImag");
//必须设置初始大小
localImagId.style.width = "250px";
localImagId.style.height = "200px";
//图片异常的捕捉,防止用户修改后缀来伪造图片
try {
localImagId.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
localImagId.filters
.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
} catch (e) {
alert("您上传的图片格式不正确,请重新选择!");
return false;
}
imgObjPreview.style.display = 'none';
document.selection.empty();
}
return true;
}
</script>
<body>
<div>
<hr  style="height:3px;border:none;border-top:3px double red;" />
</div>
<body>

<form action="IM" method="post" enctype="multipart/form-data">

图片1:<input type="file" name="myfile1" id="1"
onchange="javascript:setImagePreview(1);">标签:<input
type="text" name="label0" id="label0"><br>
<hr  style="height:3px;border:none;border-top:3px double red;" />
图片2:<input type="file" name="myfile2" id="2"
onchange="javascript:setImagePreview(2);">标签:<input
type="text" name="label1"><br>
<hr  style="height:3px;border:none;border-top:3px double red;" />
图片3:<input type="file" name="myfile3" id="3"
onchange="javascript:setImagePreview(3);">标签:<input
type="text" name="label2"><br>
<hr  style="height:3px;border:none;border-top:3px double red;" />
图片4:<input type="file" name="myfile4" id=4>标签:<input
type="text" name="label3" id="4"><br>
<hr  style="height:3px;border:none;border-top:3px double red;" />
<input type="submit" value="上传">
</form>

<div id="localImag">
<img id="preview" width=-1 height=-1 style="diplay:none" />
<div>
</body>

</html>


3.servlet页面

import java.io.File;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.JsonObject;
import com.jspsmart.upload.SmartUpload;

@WebServlet("/IM")
public class IM extends HttpServlet {

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 获取标签的内容
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

String filePath = getServletContext().getRealPath("/" + "imgs");
// 如果不存在就创建
File file = new File(filePath);
if (!file.exists()) {
file.mkdir();
// System.out.println(">>>>>>>>>>>>>>>>>>>>>>>成功创建" + filePath);
}
// 利用SmartUpload上传
SmartUpload su = new SmartUpload();
su.initialize(getServletConfig(), request, response);
// 设置大小
su.setMaxFileSize(1024 * 1024 * 10);
String result = "上传成功";
try {
// 设置上传图片的格式
su.setDeniedFilesList("exe");
su.upload();
int count = su.save(filePath);
System.out.println("上传成功了" + count);

} catch (Exception e) {
// TODO Auto-generated catch block
result = "上传失败";
e.printStackTrace();
}

for (int i = 0; i < su.getFiles().getCount(); i++) {
com.jspsmart.upload.File tempFile = su.getFiles().getFile(i);
System.out.println("-----------------------");
// 获取标签的内容
// String name = new String(su.getRequest().getParameter("label"+
// i).trim().getBytes(),"utf-8");

String label = su.getRequest().getParameter("label" + i);
System.out.println(label + "??????????");
System.out.println("表单的name值" + tempFile.getFileName());
System.out.println("表单的上传的文件名" + tempFile.getFileName());
System.out.println("表单的上传的文件大小" + tempFile.getSize());
System.out.println("上传文件的扩展名" + tempFile.getFileExt());
System.out.println("上传文件的全名" + filePath + "/"
+ tempFile.getFilePathName());
String url = filePath + "/" + tempFile.getFilePathName();
System.out.println("-----------------------");
// 生成json文件  判断是否为空
if ("".equals(label)||"".equals(tempFile.getFileName().equals(""))) {
}else {
JsonObject object = new JsonObject();
object.addProperty(label,
url);
System.out.println(object.toString());
}
}

// 设置前台
request.setAttribute("result", result);
request.getRequestDispatcher("index.jsp").forward(request, response);
// 生成json文件
JsonObject object = new JsonObject();

}

}


源码下载:http://pan.baidu.com/s/1jIpkMJc

乱码问题解决

String url = new String((filePath + "/" + tempFile.getFilePathName()).getBytes(),"utf-8");

另加javascript图片直接显示

<script>
function setImagePreview(pic) {

var docObj = document.getElementById(pic);
switch (pic) {
case 1:
var imgObjPreview = document.getElementById(preview);
break;
case 2:
var imgObjPreview = document.getElementById(preview1);
break;
default:
var imgObjPreview = document.getElementById(preview2);
}
if (docObj.files && docObj.files[0]) {
//火狐下,直接设img属性
imgObjPreview.style.display = 'block';
imgObjPreview.style.width = '300px';
imgObjPreview.style.height = '120px';
//imgObjPreview.src = docObj.files[0].getAsDataURL();
imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
} else {
//IE下,使用滤镜
docObj.select();
var imgSrc = document.selection.createRange().text;
var localImagId = document.getElementById("localImag");
//必须设置初始大小
localImagId.style.width = "250px";
localImagId.style.height = "200px";
//图片异常的捕捉,防止用户修改后缀来伪造图片
try {
localImagId.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
localImagId.filters
.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
} catch (e) {
alert("您上传的图片格式不正确,请重新选择!");
return false;
}
imgObjPreview.style.display = 'none';
document.selection.empty();
}
return true;
}
</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息