ajax上传文件

问题:由于普通的表单提交给用户带来的体验效果太差,所以绝对使用ajax进行表单的提交,用户体验效果好一点!网上找了一下,发现这个方法还是提好用的!下面就是使用ajax提交表单源码

1:注意下面的intput的name必须和后台的接收参数变量一样,否则接收不到值!

<!DOCTYPE html>
<html>
<head>
   <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
   <meta charset="utf-8" />
   <title></title>

   <script type="text/javascript" src="js/jquery-3.3.1.js" ></script>
   <link rel="stylesheet" type="text/css" href="layui/css/layui.css"/>
   <link rel="stylesheet" href="css/index.css" />

</head>
<body>

<form class="layui-form layout-form"  enctype="multipart/form-data" action="" id="uploadForm">
   <div class="layui-form-item">
      <label class="layui-form-label">论文类别</label>
      <div class="layui-input-block">
         <select name="cate_id" lay-verify="required">
            <option value="" >-请选择-</option>
            <option value="1" >子宫内膜异位症</option>
            <option value="2">多囊卵巢综合征</option>
            <option value="3" >围绝经期综合征</option>
            <option value="4">妇科肿瘤</option>
            <option value="5">不孕不育</option>
            <option value="6">炎症性疾病</option>
            <option value="7">产科相关疾病</option>
            <option value="8">其他</option>
         </select>
      </div>
   </div>
   <div class="layui-form-item">
      <label class="layui-form-label">论文类型</label>
      <div class="layui-input-block">
         <select name="type_id" lay-verify="required">
            <option value="" >-请选择-</option>
            <option value="1">论著</option>
            <option value="2">综述</option>
         </select>
      </div>
   </div>
   <div class="layui-form-item">
      <label class="layui-form-label">题目</label>
      <div class="layui-input-block">
         <input type="text" name="file_name" required  lay-verify="required" placeholder="请输入题目" autocomplete="off" class="layui-input">
      </div>
   </div>
   <div class="layui-form-item">
      <label class="layui-form-label">作者单位</label>
      <div class="layui-input-block">
         <input type="text" name="author_place" required  lay-verify="required" placeholder="请输入作者单位" autocomplete="off" class="layui-input">
      </div>
   </div>
   <div class="layui-form-item">
      <label class="layui-form-label">第一作者</label>
      <div class="layui-input-block">
         <input type="text" name="first_author" required  lay-verify="required" placeholder="请输入第一作者" autocomplete="off" class="layui-input">
      </div>
   </div>
   <div class="layui-form-item">
      <label class="layui-form-label">通讯作者</label>
      <div class="layui-input-block">
         <input type="text" name="touch_author" required  lay-verify="required" placeholder="请输入通讯作者" autocomplete="off" class="layui-input">
      </div>
   </div>
   <div class="layui-form-item">
      <label class="layui-form-label">投稿人手机</label>
      <div class="layui-input-block">
         <input type="text" name="publisher_phone" required  lay-verify="required" placeholder="请输入投稿人手机" autocomplete="off" class="layui-input">
      </div>
   </div>
   <div class="layui-form-item">
      <label class="layui-form-label">投稿人邮箱</label>
      <div class="layui-input-block">
         <input type="text" name="publisher_email" required  lay-verify="required" placeholder="请输入投稿人邮箱" autocomplete="off" class="layui-input">
      </div>
   </div>

   <div class="layui-form-item">
      <label class="layui-form-label">投稿人</label>

      <div class="layui-input-block div">
         <span class="span">选择文件</span>
         <input type="file" name="file" required  lay-verify="required"  id="file" />
         <span class="span2"></span>
      </div>
   </div>

   <div class="layui-form-item">
      <div class="layui-input-block">
         <button class="layui-btn" lay-submit lay-filter="formDemo" id="btnn">立即提交</button>
         <button type="reset" class="layui-btn layui-btn-primary">重置</button>
      </div>
   </div>
</form>
<script type="text/javascript" src="layui/layui.js" ></script>
<script>
   function validateTopic(){     
         if($('[name=file]').val()!==""){
            
            $('[name=file]').next().html($('[name=file]').val());
         }
      
   
   }
$('[name=file]').click(function(){
   validateTopic();
})
   
   
   
   
   
layui.use('form', function(){
  var form = layui.form;
  
  //监听提交
  form.on('submit(formDemo)', function(data){
    //layer.msg(JSON.stringify(data.field));
    
    //注意这里是讲整个formData封装成一个二进制文件字节流了,而不是一个单独的input file文件框
    var formData = new FormData($('#uploadForm')[0]);
    //alert("formData="+formData);
   
    $.ajax({
        async: false,//要求同步 不是不需看你的需求
        type: 'post',
        url: "http://localhost:8080/file/uploadFiles",
        data: formData,
        cache: false,
        processData: false,
        contentType: false,
        success:function(data){
            //alert("resultCallbck="+data+"投稿成功");
            //layer.alert('投稿成功');
         //重定向到成功页面
         location.href="./succeed.html";
        },
        error:function(){
            alert("上传失败");
        }
    });
    
    return false;
  });
});

    $(function () {
//      $("#btnn").click(function () {
//          var formData = new FormData($('#uploadForm')[0]);
//          alert("formData="+formData);
//       
//          $.ajax({
//              async: false,//要求同步 不是不需看你的需求
//              type: 'post',
//              url: "http://39.108.144.122:8080/file/uploadFiles",
//              data: formData,
//              cache: false,
//              processData: false,
//              contentType: false,
//              success:function(data){
//                  alert("resultCallbck="+data+"投稿成功");
//             //重定向到成功页面
//             location.href="./succeed.html";
//              },
//              error:function(){
//                  alert("上传失败");
//              }
//          });
//      });
    });

</script>


</body>
<script type="text/javascript" src="js/index.js" ></script>
<script src="js/jquery.form.js" ></script>
</html>


2:后台的文件上传操作!

/**
 * 获取所有的投稿类别和投稿类型
 * @return
 */
@RequestMapping(value = "/uploadFiles",method = RequestMethod.POST)
//上传文件
public String upload(@RequestParam(value = "file", required = false)MultipartFile file,
                     String file_name,
                     String author_place,String touch_author,
                     String publisher_phone,String first_author,
                     String cate_id,String publisher_email,
                     String type_id,
                     HttpServletRequest request) {
    logger.info("file====="+file+";"+file.getOriginalFilename()+"file_name"+file_name+request.getRemoteHost()+":"+request.getRemoteAddr());

    if(file.getSize()>1024*1000*20){
        return "fileTooLong";
    }

    //上传文件路径
    //获取跟目录
    File fpath = null;
    File filepath = null;
    try{
        //获取
        //如果文件不为空,写入上传路径
        if(!file.isEmpty()) {
            fpath = new File(ResourceUtils.getURL("classpath:").getPath());
            if(!fpath.exists()){
                fpath = new File("");
            }
            //如果上传目录为/static/upload/,则可以如下获取:
            File upload = new File(fpath.getAbsolutePath(),"static/upload/");
            if(!upload.exists()){
                upload.mkdirs();
            }
            //上传文件名
            String filename = file.getOriginalFilename();
            // D:\aaa\bb\c.txt
            String realFileName=filename.substring(filename.lastIndexOf("\\")+1,filename.length());

            //组装目睹地
            filepath = new File(upload.getPath(),realFileName);
            //判断路径是否存在,如果不存在就创建一个
            if (!filepath.getParentFile().exists()) {
                filepath.getParentFile().mkdirs();
            }
            //将上传文件保存到一个目标文件当中
            file.transferTo(filepath);
            //获取其他的参数存入数据库
            //开始插入到数据库
            Map<String,Object> map=new HashMap<>();
            map.put("file_name",file_name);
            map.put("file_extra_id",Utils.createID());
            map.put("file_size",file.getSize());
            map.put("publish_date",new Date());
            map.put("publish_ip",request.getRemoteAddr());
            logger.info("正式的ip地址=="+Utils.getLocalIp(request));
            map.put("file_name", realFileName);//投稿的名称
            map.put("file_url",filepath.getPath());
            //将文档信息上保存到数据库
            if(messageInfoService.addFileBasicInfo(map)>0){
                //开始插入到数据库
                Map<String,Object> map2=new HashMap<>();
                map2.put("file_id",Utils.createID());
                map2.put("file_name",file_name);//论文题目
                map2.put("author_place",author_place);
                map2.put("first_author",first_author);
                map2.put("touch_author",touch_author);
                map2.put("publisher_phone",publisher_phone);
                map2.put("publisher_email",publisher_email);
                map2.put("type_id",type_id);
                map2.put("cate_id",cate_id);
                map2.put("file_extra_id",map.get("file_extra_id"));
                logger.info("微信用户的ID==="+Utils.WEIXIN_USER_ID);
                map2.put("weixin_user_id",Utils.WEIXIN_USER_ID);
                //将上传信息上保存到数据库
                int i=fileAttrInfoService.addFileAttrInfo(map2);
                logger.info("i="+i);
                return "uploadSuccess";
            }
            return "success";
        } else {
            return "fileIsNotExist";
        }
    }catch(Exception e){
        e.printStackTrace();
        return "uploadFail";
    }
}

三、当上面两步都弄好了之后又发现一个问题!那就是springboot的项目限制文件的大小

springboot1.5.8的还好网上有很多的资料,springboot2.0.0的有点难,不过最终还是解决了,我使用的是下面的这个配置

@Configuration
@SpringBootApplication
public class PublishWebApplication {
   public static void main(String[] args) {
      SpringApplication.run(PublishWebApplication.class, args);
   }
   /**
    * 文件上传配置
    * @return
    */
   @Bean
   public MultipartConfigElement multipartConfigElement() {
      MultipartConfigFactory factory = new MultipartConfigFactory();
      System.out.println(".....");
      //文件最大
      factory.setMaxFileSize("1382256KB"); //KB,MB
      /// 设置总上传数据总大小
      factory.setMaxRequestSize("1382259KB");
      return factory.createMultipartConfig();
   }
}
▶▶▶上面的代码只是个人的一点小小总结,只供自己参考!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔道不误砍柴功

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值