起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14839|回复: 9

不使用附件组件上传文件

  [复制链接]

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
发表于 2012-11-5 13:35:39 | 显示全部楼层 |阅读模式
需求:在界面上选择一个文件并上传,在java中获取文件并处理

做法:
1、新增action,参数类型选择object
2、在w文件中放form标签,使用平台提供的/UI/system/components/excel/import/upload.j实现文件的上传

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
 楼主| 发表于 2012-11-5 13:50:56 | 显示全部楼层

新增action,参数类型选择object

action定义如下
1.png

在java中将输入流存为文件,代码如下
  1.         public static String uploadFile(InputStream uploadFile, String str) {
  2.                 System.out.println("字符串参数为:" + str);
  3.                 String name = java.util.UUID.randomUUID().toString();
  4.                 File file = new File(getTempDir() + "/" + name + ".tmp");
  5.                 if (file.exists())
  6.                         file.delete();
  7.                 FileOutputStream output;
  8.                 try {
  9.                         output = new FileOutputStream(file);
  10.                         try {
  11.                                 byte[] bs = new byte[1024*4];
  12.                                 int i = -1;
  13.                                 while ((i = uploadFile.read(bs)) != -1) {
  14.                                         output.write(bs, 0, i);
  15.                                 }
  16.                                 output.flush();
  17.                                 System.out.println("文件名:" + file.getName());
  18.                         } finally {
  19.                                 output.close();
  20.                         }
  21.                 } catch (Exception e) {
  22.                         throw new RuntimeException("上传失败!", e);
  23.                 }
  24.                 return "abc";
  25.         }

  26.         private static String getTempDir() {
  27.                 return System.getProperty("java.io.tmpdir");
  28.         }
复制代码
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
 楼主| 发表于 2012-11-5 14:09:16 | 显示全部楼层

在w文件中放form标签

1、在UI设计器中的合适位置放一个div,在div上点鼠标右键,点查看源码,此时切换到w文件的源码,并定位到div标签。

在div标签中,放入如下代码
  1.           <xhtml:form enctype="multipart/form-data" name="f" id="div-form" action="/UI/system/components/excel/import/upload.j"
  2.             method="post" target="div-iframe" style="margin:0;">
  3.             <xhtml:input name="process" type="hidden" value="/ttt/buy/process/goods/goodsProcess"/>  
  4.             <xhtml:input name="activity" type="hidden" value="mainActivity"/>  
  5.             <xhtml:input name="action" type="hidden" value="uploadFileAction"/>  
  6.             <xhtml:input name="uploadFile" type="file" style="margin-top:4;width:100%;height:20px;vertical-align:middle;line-height:18px;"/>  
  7.             <xhtml:input name="str" value="123"/>
  8.           </xhtml:form>  
  9.           <xhtml:iframe id="div-iframe" name="div-iframe" style="display:none" onload="mainActivity.afterUploadFile(this);"></xhtml:iframe>
复制代码
这里的form提交,我们使用平台提供的/UI/system/components/excel/import/upload.j实现文件的上传
使用upload.j,需要在form中提供process、activity、action及acton的参数
其中process、activity、action指向在上一步中定义的action,acton的参数指向上一步中定义的action的参数

2、放一个trigger,在单击事件中,调用form提交
  1. mainActivity.trigger1Click = function(event){
  2.     var s = justep.Request.convertURL("/UI/system/components/excel/import/upload.j");
  3.     var f = document.getElementById('div-form');
  4.     //在SP2版本后,form的action属性需要在js中赋值
  5.     if(!justep.Browser.IE6 && !justep.Browser.IE7)
  6.         f.setAttribute('action', s);
  7.     else
  8.         f.attributes['action'].value = s;
  9.     f.submit();        
  10. };
复制代码
经过上面的步骤,可以实现选择文件上传,接收并处理文件

3、获得action的返回值

form提交的返回结果显示在iframe中,action的返回值可以在iframe的onload事件中获取
  1. mainActivity.afterUploadFile = function(iframe){
  2.         if (iframe && iframe.contentWindow && iframe.contentWindow.document) {
  3.                 var doc = (!justep.Browser.IE||justep.Browser.IE9)?iframe.contentWindow.document:iframe.contentWindow.document.XMLDocument;
  4.                 if(doc){
  5.                         var data = justep.Request.getData(doc);
  6.                         var flag = justep.Request.getFlag(doc);
  7.                 }
  8.                 if (data && flag) {
  9.                     if(justep.Browser.IE8)
  10.                         alert("action返回值:"+data.text);
  11.                     else
  12.                         alert("action返回值:"+data.textContent);
  13.                }
  14.         }
  15. };
复制代码
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴

15

主题

112

帖子

426

积分

中级会员

Rank: 3Rank: 3

积分
426
QQ
发表于 2013-3-1 17:25:16 | 显示全部楼层
那请问对应的下载应该怎么写?可以使用download.j吗?能否给出一个例子来呢?谢谢
牛B的肖邦,也弹不出我内心的悲伤

133

主题

496

帖子

931

积分

高级会员

Rank: 4

积分
931
QQ
发表于 2014-2-24 11:45:24 | 显示全部楼层
就这个例子如果想改成多个文件上传应该怎么改

50

主题

245

帖子

671

积分

高级会员

Rank: 4

积分
671
QQ
发表于 2014-11-18 18:44:58 | 显示全部楼层
您好!为什么ie9不能接收到返回值,谷歌可以呢?

150

主题

599

帖子

1205

积分

金牌会员

Rank: 6Rank: 6

积分
1205
QQ
发表于 2014-12-5 17:12:13 | 显示全部楼层
zhaixin 发表于 2012-11-5 14:09
1、在UI设计器中的合适位置放一个div,在div上点鼠标右键,点查看源码,此时切换到w文件的源码,并定位到di ...

您好,我按照上面的设置了,我上传的文件小,处理时间短是有返回值的,但是,如果文件大,处理时间长,就没有返回值了,一直在等待状态。。。。

1

主题

10

帖子

79

积分

初级会员

Rank: 2

积分
79
QQ
发表于 2015-5-5 15:03:50 | 显示全部楼层
找了好久,果断收藏

80

主题

320

帖子

773

积分

高级会员

Rank: 4

积分
773
QQ
发表于 2015-12-30 12:12:13 | 显示全部楼层
现在有两个问题请教下
1.浏览器端把文件变成输入流,而浏览器端没有这个功能额,那么浏览器需要安装插件支持吧
2.action中传递的inputstream类型uploadFile,我们能否自己创建并赋值?

15

主题

24

帖子

78

积分

初级会员

Rank: 2

积分
78
QQ
发表于 2016-9-7 13:32:41 | 显示全部楼层
请问下如果str参数是中文 后台ACTION乱码 应该怎么解决
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-20 17:54 , Processed in 0.115683 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表