jeecg中上傳附件的處理

在jeecg中若是用了formvalid標籤來生成表單代碼的話,是不能同時提交附件的,好比最經常使用的html標籤 input type="file"是不能用的,後臺接收不到附件,具體緣由是由於jeecg中都是用ajax的方式來提交表單而且不支持附件的處理,若是要在表單中同時提交附件,只能使用jeecg的upload標籤,而且附件的提交和表單其它參數的提交其實是分兩步來處理的,具體實現過程以下:javascript

  1. 在須要上傳附件的地方增長upload標籤:html

<t:upload name="fiels" id="file_upload" extend="txt" buttonText="添加文件" multi="false" formData="taskId" uploader="smTaskController.do?importTxt">
            </t:upload>

其中比較主要的屬性是formData和uploader,formData屬性是在上傳附件是要一塊兒提交的表單參數,通常是傳業務表的主鍵,uploader屬性是具體的處理附件的提交路徑java

2.在fomrvalid標籤中增長callback屬性ajax

<t:formvalid formid="formobj" dialog="true" layout="table" action="smTaskController.do?save" callback="@Override uploadFile">

3. 在頁面頂部head之間增長相應的處理代碼:spring

<script type="text/javascript">
  $(function(){
    //查看模式狀況下,刪除和上傳附件功能禁止使用
    if(location.href.indexOf("load=detail")!=-1){
        $(".jeecgDetail").hide();
    }
   });
 
      function uploadFile(data){
          $("#taskId").val(data.obj.id);
          if($(".uploadify-queue-item").length>0){
              upload();
          }else{
              frameElement.api.opener.reloadTable();
              frameElement.api.close();
          }
      }
       
      function close(){
          frameElement.api.close();
      }
  </script>

其中最主要的就是uploadFile這個函數了,這邊的主要邏揖就是獲取業務表保存成功後返回的業務表的惟一標識設置在表單的隱藏屬性當中,而後調用upload方法上傳附件api

4.最後在controller接收附件並處理,以下:mvc

@RequestMapping(params = "importTxt", method = RequestMethod.POST)
	@ResponseBody
	public AjaxJson importTxt(HttpServletRequest request) {
		AjaxJson j = new AjaxJson();
		String taskId = request.getParameter("taskId");
		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
		Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
		for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
			try {
				
				this.smTaskService.saveFile(taskId, entity.getValue().getInputStream());
				message = "短信任務添加成功";
			} catch (IOException e1) {
				e1.printStackTrace();
				message = "短信任務添加失敗";
			} finally {
				try {
					entity.getValue().getInputStream().close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		j.setMsg(message);
		return j;
	}

其中要把HttpServletRequest參數強制轉化爲MultipartHttpServletRequest類型後再獲取文件流進行處理,用springmvc中的@RequestParam MultipartFile參數直接獲取附件是獲取不到的,具體緣由不是太清楚。app

相關文章
相關標籤/搜索