Extjs4上传文件,如果用谷歌浏览器,它会给文件一个默认的上传路径,而把真实路径隐藏起来了。如何设置啊、?
后台Java[code="java"]package controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
public class upload extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
@SuppressWarnings("deprecation")
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String hello = request.getParameter("savePath");
String nttame = request.getParameter("name");
HttpSession session = request.getSession();//通过session传参
System.out.println("接收参数,hello="+hello+",name="+nttame);
String name="";
try {
DiskFileUpload fu = new DiskFileUpload();
// 设置允许用户上传文件大小,单位:字节,这里设为2m
fu.setSizeMax(5 * 1024 * 1024 * 1024);
// 设置最多只允许在内存中存储的数据,单位:字节
fu.setSizeThreshold(10 * 1024 * 1024);
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
fu.setRepositoryPath(System.getProperty("java.io.tmpdir"));
fu.setHeaderEncoding("UTF-8");//解决中文文件名乱码。
// 开始读取上传信息
List fileItems = fu.parseRequest(request);
// 依次处理每个上传的文件
Iterator iter = fileItems.iterator();
System.out.println(fileItems.size());
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {//表单域的值
System.out.println("表单域名" + item.getFieldName());
System.out.println("表单值" + item);//如果不是文件表单域
System.out.println("名字:"+item.getString());
} else {
name = item.getName();
System.out.println("文件名:"+name);
long size = item.getSize();
if (name != null && !name.equals("") && size == 0) {
continue;
}
String path = request.getRealPath("");
File uploadFolder = new File(path + "/upload");
if (!uploadFolder.exists())
uploadFolder.mkdirs();
File file=new File(path + "/upload/" + name);
item.write(file);
}
}
response.setContentType("text/html");// 必须设置返回类型为text,否则ext无法正确解析json字符串
response.setCharacterEncoding("UTF-8");//设置编码字符集为utf-8,否则ext无法正确解析
PrintWriter outs = response.getWriter();
outs.write("{success:true}");
outs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
[/code]
ExtJS的filefield默认都是伪装路径,真实路径在上传到后台的二进制流中,只能在后台进行读取
前台的js[code="js"]{
xtype : 'form',
title : '文件上传示例',
width : 400,
bodyPadding : 10,
margin : '50 10 50 80',
frame : true,
items : [ {
xtype : 'filefield',
name : 'fileName',
fieldLabel : '上传',
labelWidth : 50,
msgTarget : 'side',
allowBlank : false,
anchor : '100%',
buttonText : '选择文件'
} ],
buttons : [ {
text : '上传',
handler : function(button) {
var form = button.up('form').getForm();// 获得表单
// 通过表单的submit事件才能开始进行文件上传
if (form.isValid()) {// 所有表单域都通过了验证
form.submit( {
url : './upload',
waitMsg : '正在保存文件...',
success : function(fp, o) {
Ext.Msg.alert('提示信息', '文件成功上传');
form.findField('fileName').reset();
},
failure : function() {
Ext.Msg.alert('警告', '对不起,文件上传无法成功.');
}
});
}
}
} ]
} [/code]
用的文件上传处理工具是commons.fileupload自己下吧,版本好像没有太大影响