<form action="<%=request.getContextPath()%>/chat" method="post"
enctype="multipart/form-data" data-ajax="false" name="form" id="form" target="relnews">
<input type="hidden" name="name" id="name" value="" />
<input type="hidden" name="taskId" id="taskId" value="" />
<input type="file" name="image" id="image" class="photo" onchange="sendImage(this)" />
</form>
<!-- 隐藏域作为表单提交后页面不跳转使用 -->
<iframe align="center" frameborder="0" marginheight="0" marginwidth="0"
name="relnews" id="hiddenIframe" scrolling="no"
style="width: 100%; height: 100%; display: none"> </iframe>
js:
function sendMessage() {
var text = DWRUtil.getValue("message");
if("" != text){
DWRUtil.setValue("message", "");
Chat.addMessage(text, name, taskId, gotMessages);
}
}
直接上代码解释:
jar包:commons-io-1.4.jar
commons-fileupload-1.2.2.jar
log4j-1.2.14.jar
如果参考我写的框架还需要加入dwr的jar包:dwr.jar
(广告时间:我的action 调用的js 是 用的dwr 提交实现的,有兴趣的可以参考博文http://my.oschina.net/u/1790925/blog/366346)
这里我的目的是选择一张图片后直接上传到服务器上,没有通过submit按钮提交,同时要把一些文字信息带入,因为上传图片的关键要设置
enctype="multipart/form-data"
而这个设置之后。后台则无法通过request方法直接获得文字属性了。所以后台取值也采用了特殊的方法。
/**
* 原生request处理图片上传
*
* */
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
//获取请求URL
String url = request.getContextPath();
//创建图片工厂类
DiskFileItemFactory factory = new DiskFileItemFactory();
//创建上传工具类
ServletFileUpload uploader = new ServletFileUpload(factory);
List<FileItem> list = null;
try {
//格式化request
list = uploader.parseRequest(request);
} catch (FileUploadException e1) {
e1.printStackTrace();
}
String name = "";//用户名
String taskid = "";//任务ID
String fileName = "";//文件名称
for (FileItem item : list) {
if (item.isFormField()) {
// 处理普通表单域,form表单设置enctype="multipart/form-data" 时 表单中其他input控件需要通过该方式取值
String field = item.getFieldName();// 表单域名,既参数名称
if (field.equals("name")) {
name = item.getString("UTF-8");// 这里需要设置页面的编码方式,与页面编码方式相同
} else if (field.equals("taskId")) {
taskid = item.getString("UTF-8");// 同上
}
} else {
fileName = item.getName();// 文件名称
int index = fileName.lastIndexOf("\\");
if (index != -1) {
fileName = fileName.substring(index + 1);
}
// 创建一个以当前时间+文件名格式的图片名称,如图片名:image.png → 20150108082222image.png 以确保图片唯一
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
fileName = sdf.format(new Date()) + fileName;
//判断是否存在图片文件夹不存在则新建
try {
if (!(new File(getServletContext().getRealPath(
"/pic")).isDirectory())) {
new File(getServletContext().getRealPath(
"/pic")).mkdir();
}
} catch (SecurityException e) {
e.printStackTrace();
}
//图片上传到服务器路径下的pic目录中
String filepath = "pic/" + fileName;
try {
item.write(new File(getServletContext().getRealPath(
"/" + filepath)));
} catch (Exception e) {
e.printStackTrace();
}// 执行保存
}
if (!item.isInMemory())
item.delete();
}