bootstrap-fileinput 后台接收uploadExtraData传递额外参数

之前能够上传文件但是后台用request.getParameter(“activity_id”)接收参数为null,找了好多篇文章终于看到一个能解决的方法,记录一下。

js:

$(".img").fileinput({
	      uploadUrl:"/VolunteerManagement/servlet/ImportServlet", //接受请求地址
	      uploadAsync : true, //默认异步上传
	      showUpload : true, //是否显示上传按钮,跟随文本框的那个
	      showRemove : true, //显示移除按钮,跟随文本框的那个
	      showCaption : true,//是否显示标题,就是那个文本框
	      showPreview : true, //是否显示预览,不写默认为true
	      dropZoneEnabled : false,//是否显示拖拽区域,默认不写为true,但是会占用很大区域
	      maxFileCount : 1, //表示允许同时上传的最大文件个数
	      enctype : 'multipart/form-data',
	      validateInitialCount : true,
	      previewFileIcon: '<i class="glyphicon glyphicon-file"></i>',
	      msgFilesTooMany : "选择上传的文件数量({n}) 超过允许的最大数值{m}!",
	      allowedFileExtensions: ["xls", "xlsx"], //接收的文件后缀
	      allowedPreviewTypes: null,
	      language : 'zh',
	      uploadExtraData : function() {// 向后台传递参数
	    	  var activity_id= $("#activity_id").val();	
	    	  var data = {
					activity_id :activity_id				
				};
				return data;
			}	
	  });

java后台:

List<FileItem> formItems = upload.parseRequest(req);
 if (formItems != null && formItems.size() > 0) {
          // 迭代表单数据
          for (FileItem item : formItems) {
              // 使用item.isFormField()方法判断FileItem类对象封装的数据是否为普通文本表单字段,还是文件表单字段
              if (item.isFormField()) {
             	 String name = URLDecoder.decode(item.getFieldName(),"UTF-8");
             	 String value = URLDecoder.decode(item.getString(),"UTF-8");
             	 if(name.equals("activity_id")){activity_id=value;}
             }
          }
假设你已经使用了 bootstrap-fileinput 插件,并在前端界面上成功的传递uploadExtraData 参数,那么在后端接收参数并封装为对象的方法如下: 1. 首先,确保你的 uploadExtraData 参数是一个对象类型。如果不是对象类型,需要先将其转换为对象类型。 2. 在后端接收 uploadExtraData 参数的方法中,可以使用一些框架或库来方便的将其封装为对象。例如,在 Spring MVC 框架中,可以使用 @RequestParam 注解来接收参数,然后使用 @RequestBody 注解将其转换为对象类型。示例代码如下: ```java @RequestMapping(value = "/upload", method = RequestMethod.POST) @ResponseBody public String upload(@RequestParam("file") MultipartFile file, @RequestBody Map<String, Object> extraData) { // 对上传的文件进行处理 // ... // 对 extraData 参数进行处理 SomeObject obj = new SomeObject(); obj.setParam1((String)extraData.get("param1")); obj.setParam2((Integer)extraData.get("param2")); // ... return "success"; } ``` 在上述代码中,@RequestParam 注解用于接收上传的文件,@RequestBody 注解用于接收 uploadExtraData 参数并封装为 Map 类型的对象。你可以根据自己的需求将其转换为其他类型的对象。 3. 如果你不想使用框架或库,也可以手动将 uploadExtraData 参数解析为一个对象。例如,在 Java 中,可以使用 JSON 解析库来解析参数并封装为对象,示例代码如下: ```java @RequestMapping(value = "/upload", method = RequestMethod.POST) @ResponseBody public String upload(@RequestParam("file") MultipartFile file, @RequestParam("uploadExtraData") String extraData) { // 对上传的文件进行处理 // ... // 对 extraData 参数进行处理 ObjectMapper mapper = new ObjectMapper(); try { SomeObject obj = mapper.readValue(extraData, SomeObject.class); // 对 obj 进行操作 } catch (IOException e) { e.printStackTrace(); } return "success"; } ``` 在上述代码中,@RequestParam 注解用于接收上传的文件和 uploadExtraData 参数,然后使用 ObjectMapper 类将 extraData 参数解析为 SomeObject 类型的对象。你可以根据自己的需求将其转换为其他类型的对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值