a3226988
2012-10-08 11:00
浏览 523
已采纳

Extjs4 上传文件 如何设置谷歌浏览器的默认路径C:/fakepath?

Extjs4上传文件,如果用谷歌浏览器,它会给文件一个默认的上传路径,而把真实路径隐藏起来了。如何设置啊、?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • FangXingXing007 2012-10-08 14:15
    已采纳

    后台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]

    点赞 打赏 评论
  • FangXingXing007 2012-10-08 11:42

    ExtJS的filefield默认都是伪装路径,真实路径在上传到后台的二进制流中,只能在后台进行读取

    点赞 打赏 评论
  • FangXingXing007 2012-10-08 14:16

    前台的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]

    点赞 打赏 评论
  • FangXingXing007 2012-10-08 14:17

    用的文件上传处理工具是commons.fileupload自己下吧,版本好像没有太大影响

    点赞 打赏 评论

相关推荐