bootstrap fileinput文件上传附加参数的传递以及后台参数的读取

直接进入正题,bootstrap fileinput的使用可以使文件上传时的界面更美观,想要一起传递的参数可以在初始化的时候通过uploadExtraData一起传递到后台。前边的初始化包括额外参数的传递实现还是比较方便,但是后端接收数据费了一段时间,特此记录一下,方便之后使用。

下面是初始化时候的代码:

        $("#uploadfile").fileinput({//初始化uploadfile控件
        language:'zh',
        uploadUrl:'/IntelligentMirrors/apkUpload',//初始化url参数能否重新赋值
        allowedFileExtensions:['txt'],
        uploadAsync:true,//默认异步上传
        showUpload:true,//是否显示上传按钮
        showRemove:true,//显示移除按钮
        showPreview:true,//是否显示预览
        showCaption:false,
        browseClass:"btn btn-primary",//按钮样式
        dropZoneEnable:true,//是否显示拖拽区域
        maxFileCount:1,//允许同时上传的最大文件数
        enctype:'multipart/form-data',
        validateInitialCount:true,
       
                uploadExtraData:function(){//向后台传递参数
            var data={
                apkName:$("#apkName").val(),
                  versionNum:$("#versionNum").val(),
                description:$("#description").val() 
                };
                return data; 
                },

        });

其中uploadExtraData的书写方式,由于要同时携带多个参数,所以参考了别人的博客,在此表示感谢,(没有记清楚博客地址,以后一定多加注意)。初始化过程中还需要注意的是enctype:'multipart/form-data'这个也是必须要有的。

后端除了文件之外还要接收apkName、versionNum、description三个参数,将他们存储到数据库中。

在后台处理的时候寻找这三个参数在哪儿费了挺大劲,可能也是自己个儿对整个过程的认识不太熟悉吧,于是我想到还是debug吧,好好找一下看看到底在什么地方,下边贴一下后端处理的代码吧:

MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(request);

在这之前一直在request里边寻找这几个参数的踪迹,但是不知道为啥都没有发现,因此转换为MultipartHttpServletRequest 来接收bootstrap fileinput传递过来的文件信息,我在MultipartHttpServletRequest 处打了一个断点,开始debug,还是像之前一样开始先看它的对象multipartRequest里边是不是有什么好玩的东西。当我看到下边图片里的东西的时候高兴坏了,哈哈哈


从multipartRequest里边的multipartParameters里边我看到了我想要的参数,能看到size是4,这是因为里边还有一个file_id字段,剩下的就好说了,但还是有地方需要注意一下:

使用multipartRequest.getParameterMap()来获取那些参数信息,如下:

Map<String, String[]> map = multipartRequest.getParameterMap();

返回值是Map<String,String[]>类型,也就是说通过get方法获取到的是一个字符数组,直接打印或者使用toString()方法可能会有问题,因此我用了一个比较笨的方法,就是把value值放到了一个ArrayList里边,然后在从list里边取出需要传递到service层的参数。简单记录一下吧:

Map<String, String[]> map = multipartRequest.getParameterMap();
Set<Entry<String, String[]>> set = map.entrySet();
Iterator<Entry<String, String[]>> iter = set.iterator();
List<String> list = new ArrayList<String>();
while(iter.hasNext()){
Entry<String,String[]> entry = iter.next();//获取到entry
String[] value = entry.getValue();
list.add(value[0].toString());

}

这样之后,参数就可以在获取以后正确的向后传递了。方法比较愚钝,主要是想要与大家分享一下这个过程,大家共同进步。向参考的博客表示感谢,以后一定注意列出链接,感谢大家,希望大家多批评指正,谢谢。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
假设你已经使用了 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 类型的对象。你可以根据自己的需求将其转换为其他类型的对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值