ExtJs_FileUpLoad的那些花样作死法

ExtJs_FileUpLoad的那些花样作死法

  文件上传下载是必不可少,躲不过去的一个功能.无论什么时候,总会忽然蹦出来个功能需求.上传吧~下载呗…所以……就有了这个upload~  不过这次相对来说容易点,在ExtJs下的,只需要给form一个 fileUpload : true 就ok~ 之后的没啥问题. 但是做的时候碰见个事儿. 就是IE这个货总是跟我对着干,我本来模仿form的出处我又忘记了 – -# 对不起啊大兄弟.我也忘记当时记下你的名字了. 在form里有这么一点,获取上传文件的文件名,或者安全路径比如  C:/fakepath/xxx.xxx  其实在Chrome下是这个,在FireFox下直接就是xxx.xxx 这样挺好,但是在IE下就不是,这货是                .看到了么?  空,毛都没有~ 本来的file是可以获取到的,跟Chrome一样,是一个安全路径加文件名.但是file要在后面做流传送不是,读到的file是个文件不是? 那咋办?  换参数喽…看咱的js先:

  1 XZWindow = function(config) {
  2     infoheadAddWin = false;
  3 
  4     if (!infoheadAddWin) {
  5         Ext.apply(config, {
  6                     XZWindow : infoheadAddWin
  7                 });
  8         form = XZForm(config);
  9         Ext.apply(config, {
 10                     WindowForm : form
 11                 });
 12         infoheadAddWin = new Ext.Window({
 13                     title : '新增',
 14                     width : 300,
 15                     height : 100,
 16                     bodyStyle : 'padding:0px',
 17                     // resizable : true,
 18                     y : 100,
 19                     closeAction : 'close',
 20                     maximizable : true,
 21                     items : form.getObj()
 22                 });
 23     }
 24     infoheadAddWin.on("close", function() {
 25                 if (form)
 26                     form.getObj().getForm().reset();
 27             })
 28     form.reset();
 29     infoheadAddWin.show();
 30 
 31 }
 32 
 33 // **********************新增****************************
 34 XZForm = function(config) {
 35 
 36     var add_form = new Ext.form.FormPanel({
 37                 layout : 'form',
 38                 id : 'XZForm',
 39                 border : false,
 40                 baseCls : 'x-plain',
 41                 bodyStyle : 'padding-top:2px;',
 42                 fileUpload : true,
 43                 items : [{
 44                     layout : 'column',
 45                     baseCls : 'x-plain',
 46                     defaults : {
 47                         layout : 'form',
 48                         baseCls : 'x-plain',
 49                     },
 50                     items : [ {
 51                         columnWidth : 1,
 52                         items : [{
 53                             xtype : 'textfield',
 54                             fieldLabel : '图片',
 55                             inputType : "file",
 56                             id : 'form-file',
 57                             name : 'file',
 58                             allowBlank : false,
 59                             anchor : '90%',
 60                             listeners : {
 61                                 change : function(o) {
 62                                     var sec = Ext.getCmp("form-file")
 63                                             .getValue();
 64                                     Ext.getCmp("fileName").setValue(sec)
 65                                 }
 66                             }
 67                         }]
 68                     }, {
 69                         xtype : 'hidden',
 70                         id : 'fileName',
 71                         name : 'fileFileName',
 72                         text : Ext.getCmp("form-file")
 73                             // 在上传这个框中,getCmp可以获取整条路径的最后的名称
 74                         /**
 75                          *     @author zhaolf 2015/01/16
 76                          *     @ carefully    
 77                          *     此方法实际证明在IE内核浏览器下无法获取
 78 //                         *     在Chrome  下 C:/fakepath/xxx.xx
 79                          *     在Firefox 下 xxx.xx
 80                          */
 81                         }]
 82                 }],
 83                 buttons : [{
 84                             text : '保存',
 85                             iconCls : 'icon_save',
 86                             handler : function() {
 87                                 pFormSave();
 88                             }
 89                         }, {
 90                             id : 'cancel_btn',
 91                             iconCls : 'icon_cancel',
 92                             text : '取消',
 93                             handler : function() {
 94                                 infoheadAddWin.close();
 95                             },
 96                             scope : this
 97                         }]
 98             });
 99     function pFormSave(params) {
100         add_form.getForm().submit({
101             url : Ext.getDom("root").value + '/base/cfoodinfo!fileupload.do?fuckie='+Ext.getCmp('form-file').getValue(),
102             method : 'post',
103             params : 'fileFileName=' + Ext.getCmp("form-file").getValue(),
104             waitMsg : '图片上传中...',
105             success : function(form, o) {
106                 hs.MessageHelper.info({
107                             msg : '操作成功!'
108                         });
109                 infoheadAddWin.close();
110                 config.grid.refresh();
111             },
112             failure : function(fp, o) {
113                 hs.MessageHelper.info({
114                             msg : '失败!不支持的图片类型或菜品已存在!'
115                         });
116             }
117             });
118     }
119     return {
120         getObj : function() {
121             return add_form;
122         },
123         load : function(phone) {
124             hs.FormHelper.load(URL.GET, {
125                         id : phone
126                     }, function(form, action) {
127                         var data = Ext.util.JSON.decode(action.result.data);
128                         form.clearInvalid();
129                         form.setValues(data);
130                     }, add_form.getForm());
131         },
132         reset : function() {
133             add_form.getForm().items.each(function(f) {
134                         f.setValue("");
135                     });
136         }
137     }
138 }

  试试证明 写出来就这个么样子 略显丑陋什么的,那些细节先略过.主要是功能~

ExtJs_FileUpLoad的那些花样作死法

  注意到101(- – #这个行号…)

  url : Ext.getDom(“root”).value + ‘/base/cfoodinfo!fileupload.do?fuckie=’+Ext.getCmp(‘form-file’).getValue(),

  后面加了个fuckie~ 我只是想表达…

  !!!这边还有个问题,带参数的URL  我在&传多个参数的时候后面的无效~嗯,记下需要琢磨一下!!!

  话有点多,前面也就这个样子了.下面记录一下后面的写法:

1     private File file;
2     String path = Parameter.imgPath;//配置文件    存放路径
3     String imgUrlpath = Parameter.imgUrlpath;//配置文件    地址转换路径

  需要个这,这个file在这边是当成File类型参数了,所以接收前面的也是文件,文件名称就有待定义了.

 1 /* 文件上传 */
 2     public void fileupload() throws IOException {
 3         User u = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();// 获取session中存储用户信息
 4         HttpServletResponse response = this.getResponse();
 5         response.setContentType("text/html;charset=UTF-8");
 6         response.setCharacterEncoding("UTF-8");// 防止弹出的信息出现乱码
 7         String fileFileName = this.getRequest().getParameter("fuckie");// 图片名称
 8 
 9             String[] str = { ".JPG", ".jpg", ".JPEG", ".jpeg", ".gif", ".GIF",
10                     ".PNG", ".png", ".BMP", ".bmp" };// 支持的图片格式
11             String strN = "";
12             System.out.println("上传文件名"+fileFileName);
13             if ((null != fileFileName && !"".equals(fileFileName))&& fileFileName.lastIndexOf(".") != -1) {
14                 strN = fileFileName.substring(fileFileName.lastIndexOf("."),fileFileName.length());// 获取上传文件名的后缀名
15             }else{
16                 System.out.println("上传失败:无法解析后缀名");
17             }
18 
19             boolean bimg = false;
20             for (int j = 0; j < str.length; j++) {
21                 if (str[j].equals(strN)) {
22                     bimg = true;
23                 }
24             }
25             if (bimg) {
26                 String shopid = "";// 店铺标识
27                 shopid = u.getDuty();
28                 try {
29                      //判断商户个人文件夹是否存在,如存在则使用,不存在则创建 
30                     // 双层目录嵌套,需首先创建上级目录后创建下级目录
31                     // 如 mkdir /home/a/b 如无a则无法创建b
32                     File stfFile = new File(path + shopid);
33                     if (!stfFile.exists() && !stfFile.isDirectory()) {
34                         System.out.println("首次创建" + path + shopid);
35                         stfFile.mkdir();
36                     }
37                     File tfFile = new File(path + shopid + "/audit");
38                     if (!tfFile.exists() && !tfFile.isDirectory()) {
39                         System.out.println("首次创建" + path + shopid + "/audit");
40                         tfFile.mkdir();
41                     }
42 
43                     InputStream is = new FileInputStream(file);
44                     // 拼接保存路径, 图片命名为 i_urlbase64(菜名)+strN(原图片后缀名) 
45                     String rootRdir = imgUrlpath + shopid + "/i_"+ UrlBase64Coder.encoded("图片测试") + strN;
46 
47                     File destFile = new File(path + shopid + "/audit/", "/i_"+ UrlBase64Coder.encoded("图片测试") + strN);
48                     OutputStream os = new FileOutputStream(destFile);
49                     byte[] buffer = new byte[1024 * 10];
50                     int length = 0;
51                     while ((length = is.read(buffer)) > 0) {
52                         os.write(buffer, 0, length);
53                     }
54                     os.close();
55                     is.close();
56                     System.out.println(rootRdir);
57 
58                     FoodInfo fi = new FoodInfo();
59                      //设置菜品ID为商户ID_i_菜品名称URLBASE64编码 
60                     System.out.println("上传成功!");
61                     PrintWriter out = response.getWriter();
62                     out.print("{\"success\":true}");
63                     out.flush();
64 
65                 } catch (Exception e1) {
66                     e1.printStackTrace();
67                 }
68             } else {
69                 PrintWriter out = response.getWriter();
70                 out.print("{\"success\":false}");
71                 out.flush();
72                 System.out.println("上传失败:不支持的图片类型!");
73             }
74     }

  有个64URLsafe编码的问题:

 1 class UrlBase64Coder {
 2     public final static String ENCODING = "UTF-8";
 3 
 4     // 加密
 5     public static String encoded(String data)
 6             throws UnsupportedEncodingException {
 7         byte[] b = Base64.encodeBase64(data.getBytes(ENCODING));
 8         return new String(b, ENCODING).replace("/", "_").replace("+", "-");
 9     }
10 
11     // 解密
12     public static String decode(String data)
13             throws UnsupportedEncodingException {
14 
15         byte[] b = Base64.decodeBase64(data.replace("_", "/").replace("-", "+")
16                 .getBytes(ENCODING));
17         return new String(b, ENCODING);
18     }
19 }

  用的是import org.apache.commons.codec.binary.Base64;这个  commons-codec-1.3.jar  基本就这个样子了

  上传没啥东西.我想要记录的就是那个恶心人的IE…给加了个参数传递它的值…后面的就没啥意义了~也就是写长点,显得很专业的样子 ^. ^

  下载的话…没啥问题吧? 后面有时间补上一个.

 

  叶落星辰  W

 

转载于:https://www.cnblogs.com/may26/p/4233316.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109584.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux中进行模块操作的命令

    Linux中进行模块操作的命令

    2021年8月18日
    55
  • 数据库端口号怎么修改_sqlserver查看sa密码

    数据库端口号怎么修改_sqlserver查看sa密码sqlserver端口如果出现问题,会直接影响sqlserver的登录,下面就教您sqlserver端口的更改方法,供您参考,让您不再为sqlserver端口问题而头疼。今天遇到一个问题,sqlserver无法登陆,到Services里看,服务没有起来。但是在启动Service时遇到问题说无法启动。去AdministrativeTools->EventViewer中查看了一下,…

    2022年8月31日
    2
  • iOS的三重缓冲和微型口吃(micro stuttering)

    iOS的三重缓冲和微型口吃(micro stuttering)Instrument中的Display模块:instrument-displayiOS中采用双重缓冲和三重缓冲一起使用,从display中就可以看出来。即:双缓冲不够用了就采用三缓冲。首先看看双重缓冲:双缓冲如上,此时双缓冲很够用,每次Vsync来到之前,上一帧的framebuffer(apple叫做surface+ID),所以帧率很高,基本在…

    2022年5月11日
    43
  • mac安装vue开发环境_vue项目有几个环境

    mac安装vue开发环境_vue项目有几个环境一、前言因工作缘故,需要做一个移动端app,面对2016下半年至今webapp最流行的三个技术React,angular,vue,三选一,如何先,经过前期的技术选型,最后决定使用vue。具体查看本人之前的blog移动app技术选型,react,angular,vue二、vue开发环境的搭建由于本人使用的是mac,所以环境是windows的下面可以忽略……通过下面一张图对Vue的整体开发环境有

    2022年10月21日
    0
  • WinRAR去广告心得

    WinRAR去广告心得学习winAPI函数CreateWindow函数 软件创建窗口分为1首先注册2开始创建3显示分别有各自函数形成 还要有消息传递机制每个窗口有自己的类注意类函数参数问题   Winrar5.4去广告首先下断创建窗口函数进而多次运行暂停知道找到广告出现的窗口class追踪函数入口ret掉注意堆栈平衡

    2022年5月23日
    26
  • jvm类的加载机制_java类加载流程及原理

    jvm类的加载机制_java类加载流程及原理1.类加载器的组织结构转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52301541类加载器ClassLoader是具有层次结构的,也就是父子关系。其中,Bootstrap是所有类加载器的父亲。(1)Bootstrapclassloader:启动类加载器当运行Java虚拟机时,这个类加载器被创建,…

    2022年8月11日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号