关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、418799587 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 41917|回复: 21

关于文件上传

[复制链接]
发表于 2013-5-4 16:45:10 | 显示全部楼层 |阅读模式
请问该如何实现文件上传,3.1版本只看到这种写法:
UploadFile uploadFile = new UploadFile(request, icon);
                uploadFile.setCusPath("plug-in/accordion/images");
                uploadFile.setExtend("extend");
                uploadFile.setTitleField("iconclas");
                uploadFile.setRealPath("iconPath");
                uploadFile.setObject(icon);
                uploadFile.setByteField("iconContent");
                uploadFile.setRename(false);
                systemService.uploadFile(uploadFile);


问题是icon不是我的pojo,想自己写上传方法得到的request对象又不是common-fileupload需要的,请赐教!
发表于 2013-5-4 21:45:25 | 显示全部楼层
本帖最后由 GIN 于 2013-5-4 21:46 编辑
  1.          /**
  2.          * 上传文件
  3.          *
  4.          * @param request
  5.          * @return
  6.          * @throws Exception
  7.          */
  8.         @RequestMapping(params = "saveFiles", method = RequestMethod.POST)
  9.         @ResponseBody
  10.         public AjaxJson saveFiles(HttpServletRequest request) throws Exception {

  11.                 // 把压缩包里面的jar拷贝到工程的lib下面即可 主要方法介绍
  12.                 //  新建一个SmartUpload对象
  13.                 AjaxJson j = new AjaxJson();

  14.                 String fileName = null;
  15.                 UploadFile uploadFile = new UploadFile(request);
  16.                 String ctxPath = request.getSession().getServletContext().getRealPath("");
  17.                 File file = new File(ctxPath);
  18.                 if (!file.exists()) {
  19.                         file.mkdir();// 创建文件根目录
  20.                 }
  21.                 MultipartHttpServletRequest multipartRequest = uploadFile.getMultipartRequest();
  22.                 Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
  23.                 for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
  24.                         MultipartFile mf = entity.getValue();// 获取上传文件对象
  25.                         fileName = mf.getOriginalFilename();// 获取文件名
  26.                         String savePath = file.getPath() + "/" + fileName;// 上传后的文件绝对路径
  27.                         System.out.println("上传后路径:"+savePath);
  28.                         File savefile = new File(savePath);
  29.                         try {
  30.                                 FileCopyUtils.copy(mf.getBytes(), savefile);
  31.                         } catch (IOException e) {
  32.                                 e.printStackTrace();
  33.                         }
  34.                 }

  35.                 message = "上传成功";
  36.                 j.setMsg(message);
  37.                 return j;
  38.         }
复制代码
 楼主| 发表于 2013-5-5 12:00:11 | 显示全部楼层
感谢,问题是如果同时上传2张图片会执行2次这个saveFiles方法,有办法让他只执行一次吗?
 楼主| 发表于 2013-5-5 12:03:39 | 显示全部楼层
GIN 发表于 2013-5-4 21:45

感谢,问题是如果同时上传2张图片会执行2次这个saveFiles方法,有办法让他只执行一次吗?
发表于 2013-5-5 12:34:52 | 显示全部楼层
sesame 发表于 2013-5-5 12:03
感谢,问题是如果同时上传2张图片会执行2次这个saveFiles方法,有办法让他只执行一次吗?
...

把多个文件放在一个表单里 统一提交
发表于 2013-5-5 12:35:55 | 显示全部楼层
见2楼的程序代码 第25行  会迭代表单里的文件 就是处理多个文件上传的情况的
 楼主| 发表于 2013-5-5 13:41:41 | 显示全部楼层
GIN 发表于 2013-5-5 12:35
见2楼的程序代码 第25行  会迭代表单里的文件 就是处理多个文件上传的情况的 ...

现在用jeecg例子就只有一个表单提交,但是是可以选择多个文件的,debug了一下一个文件会激发一次saveFiles方法,如果同时选择了多个会执行多次saveFiles方法。
发表于 2013-5-5 14:12:34 | 显示全部楼层
sesame 发表于 2013-5-5 13:41
现在用jeecg例子就只有一个表单提交,但是是可以选择多个文件的,debug了一下一个文件会激发一次saveFile ...

jeecg里上传文件有几种方式 一种是自动上传 选择文件后就会触发提交到控制器  还有就是表单提交的方式 最后统一提交 你这样可能是用了自动上传吧 才会选一个文件提交一次?
 楼主| 发表于 2013-5-5 14:21:54 | 显示全部楼层
GIN 发表于 2013-5-5 14:12
jeecg里上传文件有几种方式 一种是自动上传 选择文件后就会触发提交到控制器  还有就是表单提交的方式 最 ...

我用的是这种方式
    <div class="form">
     <t:upload name="file_upload" uploader="jdController.do?saveImgs" extend="*.png;*.jpg" id="file_upload" formData="shortName,level,detail,sid,pid"></t:upload>
    </div>
最后是有上传文件按钮提交,非自动提交。
发表于 2013-5-5 14:49:49 | 显示全部楼层
本帖最后由 GIN 于 2013-5-5 14:56 编辑

t1.png


jsp代码:

<td class="value" width="30%">
     <t:upload queueID="test" multi="true" name="fiels" buttonText="上传文件" dialog="false" callback="openrcon"  uploader="systemController.do?saveFiles" extend="office" id="default" formData="documentTitle"></t:upload>
    </td>


<td class="value" id="test">
</td>


queueID 是指定该上传 是多个文件队列上传  值为显示实时上传的队列的容器id
multi 是允许多文件上传

这样 只需要一个<t:upload> 就可以了

希望可以帮助你


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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