1、JSP页面
<a href="javascript:void();" id="PicName" > 选择图片</a>
<input type="file" id="fileToUpload" name="fileToUpload" >
<button onClick="fileUpload();" >上传图片</button>
<dl>
<dt>缩略图预览效果</dt>
<dd><img src="thumb/1.jpg" id="viewImg" alt="缩略图" /></dd>
</dl>
<script type="text/javascript" src="ajax/jquery.js"></script>
<script type="text/javascript" src="ajax/ajaxfileupload.js"></script>
<script type="text/javascript">
$("#fileToUpload").change(function(){
var uploadfile = $("#fileToUpload").val();
if(uploadfile!=null||uploadfile!=""){
var fileName=getFileName(uploadfile);
$("#PicName").html(fileName);
}
});
function getFileName(file){
var pos=file.lastIndexOf("\\");
return file.substring(pos+1);
}
function fileUpload()() {
var uploadfile = $("#codePic").val();
var fileTypes = new Array("jpg","png","gif","bmp","jpeg");
var fileTypeFlag = "0";
var newFileName = uploadfile.split('.');
newFileName = newFileName[newFileName.length-1];
for(var i=0;i<fileTypes.length;i++){
if(fileTypes[i]==newFileName){
fileTypeFlag="1";
}
}
if(fileTypeFlag=="0"){
alert("图片必须是jg、png、gif、bmp或jpeg格式!");
$("#PicName").html(' 选择图片');
return false;
}
$.ajaxFileUpload({
url : '../../../FileUploadServlet',
secureuri : false,
fileElementId : 'codePic',
dataType : 'json',
success : function(data, status) {
$('#viewImg').attr('src',data.picUrl);
$("#PicName").html("上传成功");
},
error : function(data, status, e) {
alert('上传出错!');
}
})
return false;
}
</script>
2、Servlet
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
*
* 文件上传 具体步骤:
* 1)获得磁盘文件条目工厂 DiskFileItemFactory 要导包
* 2) 利用 request 获取 真实路径 ,供临时文件存储,和 最终文件存储 ,这两个存储位置可不同,也可相同
* 3)对 DiskFileItemFactory 对象设置一些 属性
* 4)高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory)
* 目的是调用 parseRequest(request)方法 获得 FileItem 集合list ,
* 5)在 FileItem 对象中 获取信息, 遍历, 判断 表单提交过来的信息 是否是 普通文本信息 另做处理
* 6) 第一种. 用第三方 提供的 item.write( new File(path,filename) ); 直接写到磁盘上
* 第二种. 手动处理
*
*/
/**
* Servlet implementation class Code_PicUpload_Servlet
*/
public class Code_PicUpload_Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static String PATH_FOLDER = "/";
private static String TEMP_FOLDER = "/";
@Override
public void init(ServletConfig config) throws ServletException {
ServletContext servletCtx = config.getServletContext();
PATH_FOLDER = servletCtx.getRealPath("images/thumb");
TEMP_FOLDER = servletCtx.getRealPath("images/thumb/temp");
}
/**
* @see HttpServlet#HttpServlet()
*/
public Code_PicUpload_Servlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
DiskFileItemFactory factory = new DiskFileItemFactory();
/**
* 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem
* 格式的 然后再将其真正写到 对应目录的硬盘上
*/
factory.setRepository(new File(TEMP_FOLDER));
factory.setSizeThreshold(1024 * 1024);
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> list = upload.parseRequest(request);
FileItem item = getUploadFileItem(list);
String filename = getUploadFileName(item);
String saveName = new Date().getTime() + filename.substring(filename.lastIndexOf("."));
String picUrl = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/resource/images/thumb/"+saveName;
System.out.println("存放目录:" + PATH_FOLDER);
System.out.println("原文件名:" + filename);
System.out.println("保存的文件名:" + saveName);
System.out.println("浏览器访问路径:" + picUrl);
item.write(new File(PATH_FOLDER, saveName));
PrintWriter writer = response.getWriter();
Map<String, String> map=new HashMap<String, String>();
map.put("picUrl", picUrl);
map.put("msg", "文件大小:"+item.getSize()+",文件名:"+filename);
String json=JSON.toJSONString(map);
PrintWriter writer = response.getWriter();
writer.write(json);
writer.close();
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
private FileItem getUploadFileItem(List<FileItem> list) {
for (FileItem fileItem : list) {
if(!fileItem.isFormField()) {
return fileItem;
}
}
return null;
}
private String getUploadFileName(FileItem item) {
String value = item.getName();
int start = value.lastIndexOf("/");
String filename = value.substring(start + 1);
return filename;
}
}