页面代码:
<body style="margin: 0px auto;">
文件:<input type="file" name="file" id="file">
<input type="button" id="btn" value="提交">
<div id="img">
</div>
</body>
$(function() {
$("#btn").click(function() {
uploadFile('file');
});
});
function uploadFile(id) {
var pathName = $("#" + id).val();
if (pathName == "") {
alert('请选择文件!');
return;
} else {
$.ajaxFileUpload({
url : 'index.do?method=uploadFile',
type : 'POST',
secureuri : false,// 一般设置为false
fileElementId : [ "" + id + "" ],// 文件上传空件的id属性
// contentType : 'application/json;charse=UTF-8',
dataType : 'html',
success : function(data, status) // 服务器成功响应处理函数
{
var s =data.replace('<pre style="word-wrap: break-word; white-space: pre-wrap;">','');
s = s.replace('</pre>','');
var s1= eval("("+s+")");
console.info(s1.filePath);
var path = BASE_PATH+"/uploadimg/thumbnail/"+s1.filePath;
$("#img").html('<img alt="" src="'+path+'">');
},
error : function(data, status, e)// 服务器响应失败处理函数
{
alert("服务错误!");
}
});
}
}
上传代码 大同小异
这里随便考了一个:能用
public void upload(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
String filePaths="";
String savePath = this.getServletContext().getRealPath(
"/WEB-INF/upload");
File file = new File(savePath);
// 判断上传文件的保存目录是否存在
if (!file.exists() && !file.isDirectory()) {
System.out.println(savePath + "目录不存在,需要创建");
// 创建目录
file.mkdir();
}
// 消息提示
String message = "";
try {
// 使用Apache文件上传组件处理文件上传步骤:
// 1、创建一个DiskFileItemFactory工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 2、创建一个文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
// 解决上传文件名的中文乱码
upload.setHeaderEncoding("UTF-8");
// 3、判断提交上来的数据是否是上传表单的数据
if (!ServletFileUpload.isMultipartContent(request)) {
// 按照传统方式获取数据
// return;
}
// 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
List<FileItem> list = upload.parseRequest(request);
for (FileItem item : list) {
// 如果fileitem中封装的是普通输入项的数据
if (item.isFormField()) {
String name = item.getFieldName();
// 解决普通输入项的数据的中文乱码问题
String value = item.getString("UTF-8");
// value = new String(value.getBytes("iso8859-1"),"UTF-8");
System.out.println(name + "=" + value);
} else {// 如果fileitem中封装的是上传文件
// 得到上传的文件名称,
String filename = item.getName();
System.out.println(filename);
if (filename == null || filename.trim().equals("")) {
continue;
}
// 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:
// c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
// 处理获取到的上传文件的文件名的路径部分,只保留文件名部分
filename = filename
.substring(filename.lastIndexOf("\\") + 1);
// 获取item中的上传文件的输入流
InputStream in = item.getInputStream();
// 创建一个文件输出流
filePaths =savePath + "\\"+System.currentTimeMillis()+"_"+filename;
FileOutputStream out = new FileOutputStream(filePaths);
//将存放路径存到数据库
// pictureService.upLoad(savePath + "\\"
// +System.currentTimeMillis()+"_"+filename);
// 创建一个缓冲区
byte buffer[] = new byte[1024];
// 判断输入流中的数据是否已经读完的标识
int len = 0;
// 循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
while ((len = in.read(buffer)) > 0) {
// 使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\"
// + filename)当中
out.write(buffer, 0, len);
}
// 关闭输入流
in.close();
// 关闭输出流
out.close();
// 删除处理文件上传时生成的临时文件
item.delete();
message = "文件上传成功!";
}
}
} catch (Exception e) {
message = "文件上传失败!";
e.printStackTrace();
}
response.getWriter().write(filePaths);
response.getWriter().flush();
response.getWriter().close();
}
通过
$.ajaxFileUpload 上传文件非常方便 但需要 引入<pre name="code" class="html">ajaxFileUpload.js