全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

使用Spring boot + jQuery上传文件(kotlin)功能实例详解

文件上传也是常见的功能,趁着周末,用Spring boot来实现一遍。

前端部分

前端使用jQuery,这部分并不复杂,jQuery可以读取表单内的文件,这里可以通过formdata对象来组装键值对,formdata这种方式发送表单数据更为灵活。你可以使用它来组织任意的内容,比如使用

formData.append("test1","hello world");

在kotlin后端就可以使用@RequestParam("test1") greet: String来取得他的值。

 在本例的上传中,formdata用于装配上传表单,就像这样:

function uploadfile() {
      var formData = new FormData();
      $.each($("input[type='file']")[0].files, function (i, file) {
        formData.append('upload-file', file);
      });
      $.ajax({
        url: "/upload",
        method: "post",
        data: formData,
        processData: false,
        contentType: false
      }).done(function (res) {
        if (res.success) {
          $("#message").text(res.message + res.files);
          $("#message").addClass("green")
          $("#message").removeClass("red")
        } else {
          $("#message").text("cannot upload files, reason: " + res.message)
          $("#message").addClass("red")
          $("#message").removeClass("green")
        }
      })
        .fail(function (res) {

        })
    }

使用FormData对象,在前端连form标签都不需要。

 其中关于上面代码的几点解释:

•如果input标签上使用了multiple,那么用户可能选择多个文件,所以再装配formdata的时候,需要上面的each循环。

•contentType: false 设置成false告诉jQuery在header里不要用任何的content type。

•processData: false:告诉jQuery不用讲传输内容编码(因为默认的content type是application/x-www-form-urlencoded)。如我们要发送DOM或确实不需要编码的对象,就把这个参数设成false。

注意:

•如果不将contentType设置成false,kotlin后端会报异常

Current request is not a multipart request

•如果没有将processData设成false,javascript会报错:

Uncaught TypeError: Illegal invocation

•如果要上传多个文件,在input标签上设置multiple属性。

后端部分

后端准备在上传完成后,给前端回复一个成功或失败的信息,为此,创建一个返回的对象:

class UploadResult(val success: Boolean, val message: String, val files: Array<String>)

•success: 告诉前端是否上传成功

•message:服务器端往前端返回的信息,可以包含任意后端想返回的内容,比如今天服务器所在地天气不好,所以服务器打算拒绝非管理员的上传请求。

•files:上传成功了哪些文件。、

 后端的关键代码:

@ResponseBody
@PostMapping("upload")
fun upload(@RequestPart("upload-file") uploadfile: Array<MultipartFile>): UploadResult {
  if (uploadfile.count() == 0) return UploadResult(false, "the uploading file is not detected.", arrayOf())
  val dir = env.getProperty("com._1b2m.defaultuploaddir")
  val f: File = File(dir)
  if (!f.exists()) {
    f.mkdirs()
  }
  for (file in uploadfile) {
    val fileName = file.originalFilename;
    val filepath: String = Paths.get(dir, fileName).toString()
    val stream: BufferedOutputStream = BufferedOutputStream(FileOutputStream(File(filepath)))
    stream.write(file.bytes)
    stream.close()
  }
  return UploadResult(true, "successfully uploaded your file(s). ", uploadfile.map { it.originalFilename }.toTypedArray())
}

注意:

 在kotlin中的RequestPart("upload-file”),和前端的formData.append('upload-file', file)要保持一致,我这里用的变量叫upload-file,如果不一致,后端就没有取到数据了。

本文涉及到的源代码:https://github.com/syler/Fun/tree/master/spring-boot-file-upload-with-jquery

最后上一张截图,图片上传成功:

以上所述是小编给大家介绍的使用Spring boot + jQuery上传文件(kotlin),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!


# spring  # boot  # jquery  # 上传文件  # kotlin  # jquery+ajaxform+springboot控件实现数据更新功能  # Spring shiro + bootstrap + jquery.validate 实现登录、注册  # 玩转spring boot 结合jQuery和AngularJs(3)  # Spring Boot 中application.yml与bootstrap.yml的区别  # spring boot+thymeleaf+bootstrap实现后台管理系统界面  # AJAX +SpringMVC 实现bootstrap模态框的分页查询功能  # 基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询  # springboot整合jquery和bootstrap框架过程图解  # 后端  # 上传  # 表单  # 多个  # 会报  # 小编  # 设置成  # 都不  # 就像  # 你可以  # 不需要  # 我这  # 一遍  # 这部  # 可以通过  # 就把  # 给大家  # 如果没有  # 几点  # 涉及到 


相关文章: 全景视频制作网站有哪些,全景图怎么做成网页?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  如何通过山东自助建站平台快速注册域名?  如何在Ubuntu系统下快速搭建WordPress个人网站?  公司门户网站制作流程,华为官网怎么做?  制作旅游网站html,怎样注册旅游网站?  Swift中循环语句中的转移语句 break 和 continue  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  临沂网站制作企业,临沂第三中学官方网站?  湖北网站制作公司有哪些,湖北清能集团官网?  行程制作网站有哪些,第三方机票电子行程单怎么开?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  创业网站制作流程,创业网站可靠吗?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何通过云梦建站系统实现SEO快速优化?  如何通过虚拟主机快速搭建个人网站?  模具网站制作流程,如何找模具客户?  建站之星如何实现PC+手机+微信网站五合一建站?  网站制作话术技巧,网站推广做的好怎么话术?  如何零基础开发自助建站系统?完整教程解析  制作农业网站的软件,比较好的农业网站推荐一下?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  如何快速搭建二级域名独立网站?  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何快速生成ASP一键建站模板并优化安全性?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何通过VPS建站实现广告与增值服务盈利?  专业商城网站制作公司有哪些,pi商城官网是哪个?  建站之星官网登录失败?如何快速解决?  建站之星如何开启自定义404页面避免用户流失?  香港服务器租用费用高吗?如何避免常见误区?  建站主机SSH密钥生成步骤及常见问题解答?  javascript基本数据类型及类型检测常用方法小结  如何自定义建站之星网站的导航菜单样式?  济南专业网站制作公司,济南信息工程学校怎么样?  如何在橙子建站上传落地页?操作指南详解  简单实现Android验证码  建站之星如何取消后台验证码生成?  香港服务器租用每月最低只需15元?  焦点电影公司作品,电影焦点结局是什么?  电商网站制作公司有哪些,1688网是什么意思?  山东云建站价格为何差异显著?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  定制建站模板如何实现SEO优化与智能系统配置?18字教程  淘宝制作网站有哪些,淘宝网官网主页?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何获取上海专业网站定制建站电话?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  如何快速上传自定义模板至建站之星? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。