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修改密码命令「建议收藏」

    linux命令大全密码修改,linux修改密码命令「建议收藏」你会面对一个引导项目列表。查找其中类似以下输出的句行:kernel/vmlinuz-2.4.18-0.4roroot=/dev/hda2按箭头键直到这一行被突出显示,然后按[e]。你现在可在文本结尾处(空一格)再添加single/linux-s来告诉GRUB引导单用户Linux模式。按[Enter]键来使编辑结果生效。你会被带会编辑模式屏幕,从这里,按[b],GRU…

    2022年9月6日
    6
  • java大数据开发需要掌握什么_大数据要学java吗

    java大数据开发需要掌握什么_大数据要学java吗​​​​​​你想过自己的未来规划吗?java大数据程序员只需要学到技术就行吗?1.如何成为大数据工程师Java开发是IT行业的经典岗位,行业当中存在普遍的需求,Web开发、Android开发、游戏开发等基本上Java语言是主力队伍。而进入大数据时代,Java又在大数据方向上有了用武之地,又该如何进行成长路线规划。在Java程序界流行着一种默认的说法叫黄金5年,也就是一个程序员从入职的时候开始算起,前五年的选择直接影响着整个职业生涯中的职业发展方向和薪资走向。2014年8月,阿里巴巴举办了

    2022年10月19日
    3
  • 我为什么离开神州泰岳

    我为什么离开神州泰岳

    2021年11月13日
    62
  • SSM框架介绍「建议收藏」

    SSM框架介绍「建议收藏」1、SSM框架简介SSM框架是SpringMVC,Spring和Mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,Controller层,Service层,DAO层四层,使用SpringMVC负责请求的转发和视图管理,Spring实现业务对象管理,Mybatis作为数据对象的持久化引擎。…

    2022年7月12日
    22
  • springboot使用h2数据库做单元测试_h2数据库对接SQL

    springboot使用h2数据库做单元测试_h2数据库对接SQLh2数据库很方便,不用安装,我们在springboot项目中添加相关依赖就可以了。maven配置&amp;lt;dependency&amp;gt;&amp;lt;groupId&amp;gt;com.h2database&amp;lt;/groupId&amp;gt;&amp;lt;artifactId&amp;gt;h2&amp;lt;/artifactId&amp;gt;

    2022年10月9日
    2
  • zigbee开发板(nxpzigbee开发)

    前面我们搭建好了zigbee开发的硬件平台,买一块开发板,注意只要这块开发板上有cc2530,可以向里面烧录程序就可以了。具体的烧录过程我会最近上传我的烧录过程,相关软件我尽快上传。好了回归这一次的主题,那么我们到底需要什么样的开发环境呢?这完全取决于你的项目大小,如果你的项目只是学会使用zigbee,那么你只需要一款烧录软件,以及一款合适的用于编写cc2530的c编译器就OK了。但是我这

    2022年4月10日
    56

发表回复

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

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