struts2接收文件全是后缀名tmp解决办法

有个朋友之前一直用SSM,后来用SSH开发项目,遇到一个问题

在struts2接收上传文件的时候,发现所有接收的文件不对,后缀名还都是.tmp的,其实这个解决办法太简单。

文件确实都已经上传上来了。Struts2默认就是上传的文件是.temp格式的临时文件,只需要修改后缀名即可,但是他用的是layer这个插件。只需要简单改造,取得文件名即可,layer的文件上传js是这样的

layui.use('upload', function(){
  var headimgFileName="";   //1.这里添加一个变量
	var $ = layui.jquery
  ,upload = layui.upload;
  
  //多文件列表示例
  var demoListView = $('#demoList')
  ,uploadListIns = upload.render({
    elem: '#testList'
    ,url: '../upload/upload.do'
    ,accept: 'file'
    ,multiple: true
    ,auto: false
    ,data:headimgFileName        //2.这里追加一个data字段,传入文件名
    ,field : "headimg"
    ,bindAction: '#testListAction'
    ,choose: function(obj){   
      var files = this.files = obj.pushFile(); 
      //读取本地文件
      obj.preview(function(index, file, result){
    	  headimgFileName= file.name;           //3.这个是选择上传文件后,等待上传按钮触发的回调函数,在这里可以取到文件名,所以追加这行
        var tr = $(['<tr id="upload-'+ index +'">'
          ,'<td id="fileName">'+ file.name +'</td>'
          ,'<td>'+ (file.size/1014).toFixed(1) +'kb</td>'
          ,'<td>等待上传</td>'
          ,'<td>'
            ,'<button class="layui-btn layui-btn-mini demo-reload layui-hide">重传</button>'
            ,'<button class="layui-btn layui-btn-mini layui-btn-danger demo-delete">删除</button>'
          ,'</td>'
        ,'</tr>'].join(''));
        
        //单个重传
        tr.find('.demo-reload').on('click', function(){
          obj.upload(index, file);
        });
        
        //删除
        tr.find('.demo-delete').on('click', function(){
          delete files[index]; //删除对应的文件
          tr.remove();
          uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
        });
        
        demoListView.append(tr);
      });
    }
    ,done: function(res, index, upload){
      if(res.code == 0){ //上传成功
        var tr = demoListView.find('tr#upload-'+ index)
        ,tds = tr.children();
        tds.eq(2).html('<span style="color: #5FB878;">上传成功</span>');
        tds.eq(3).html(''); //清空操作
        return delete this.files[index]; //删除文件队列已经上传成功的文件
      }
      this.error(index, upload);
    }
    ,error: function(index, upload){
      var tr = demoListView.find('tr#upload-'+ index)
      ,tds = tr.children();
      tds.eq(2).html('<span style="color: #FF5722;">上传失败</span>');
      tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传
    }
  });
  
});

1.定义一个变量用于存放文件名

2.请求时,追加额外的data字段,传入想传的数据

3.在pre回调中,赋值给定义的变量

通过这三步,已经可以接收到文件的名字了


接下来是服务器端

通过属性驱动,就自动获取到了文件的名字


用的是多文件上传



它会循环调用,服务器一次次接收到请求,并非将多个文件的文件名一次性发过来逗号隔开

所以服务器端保存文件,这么写即可,我用的UUID作为了文件的名字,FileUtils取后缀


String oldName=UUID.randomUUID().toString().replaceAll("-", "");
String suffix = FilenameUtils.getExtension(headimgFileName);
String newName=oldName+"."+suffix;
try {
    FileUtils.copyFile(headimg, new File("D://upload/"+newName));
} catch (IOException e) {
    e.printStackTrace();
    System.out.println("服务器文件存储失败!");
}

这样即可


本人个人原创,如有雷同,纯属巧合,或者与本人联系,做改动。请转载或者CV组合标明出处,谢谢!(如有疑问或错误欢迎指出,本人QQ:752231513)

猜你喜欢

转载自blog.csdn.net/qq_30548105/article/details/79556482