首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

上传文件小Demo

一、背景

软件开发过程中,文件上传在很多项目中都是很重要的功能点。现在成熟的技术背景下,上传文件并不是很神秘的事,但是很多小伙伴还是时感迷茫,今天就跟大家分享一个上传文件的小demo。

二、核心内容

1.传统form表单提交上传文件

传统form表单上传文件,可以说是最原生的上传文件方式。我们直接看代码:

前端代码为:

其中关键是enctype这个属性,详解如下:

enctype这个属性管理的是表单的MIME(Multipurpose Internet Mail Extensions)编码,共有三个值可选:

1、application/x-www-form-urlencoded ---默认值,作用是设置表单传输的编码,不能用于上传文件

eg: AJAX中xmlHttp.setRequestHeader("Content-Type","application/x-www-form- urlencoded"),不写会报错的

form表单里是可以不写enctype=application/x-www-form-urlencoded,因为默认HTML表单就是这种传输编码类型

2、multipart/form-data ---制定传输数据的特殊类型,上传的非文本的内容,比如图片或是是mp3

3、text/plain ---纯文本传输,不能用于上传文件

另外还要注意数据提交方式设置为“post”。get方式传输数据有大小限制为2KB。而post方式原则上是没有大小限制的(实际上有,有兴趣的可以尝试)

2.ajax上传文件

ajax2.0后开始支持文件上传的。通过FormData类来实现。前端源码如下:

文件:

上传文件

$(function () {

$("#upload").click(function () {

var formData = new FormData($('#uploadForm')[0]);

$.ajax({

type: 'post',

url: "http://localhost:8080/dch2/FileUpLoadController/oneFileUpload.do",

data: formData,

cache: false,

processData: false,

contentType: false,

}).success(function (data) {

alert(data);

}).error(function () {

alert("上传失败");

});

});

});

根本上讲:ajax上传底层还是form表单提交,只是进行了封装。现在应用系统中大部分使用ajax文件上传,良好的异步操作更适用于现代系统。

3.Java后台代码

不论哪种文件上传,他们后台都是公用的,有时候只需要进行一些小的修改就行。代码如下:

@RequestMapping(value="oneFileUpload.do")

public String oneFileUpload(HttpServletRequest request, ModelAndView model){

MultipartFile mf = null;

if (!(request instanceof MultipartHttpServletRequest)) {

String errorMsg = "your post form is not support ENCTYPE='multipart/form-data' ";

logger.error(errorMsg);

throw new RuntimeException(errorMsg);

}

String savePath = request.getSession().getServletContext().getRealPath("/upfile");

MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;

List multipartFiles = multipartRequest.getFiles("file");

if (null != multipartFiles && multipartFiles.size() > 0) {

mf = multipartFiles.get(0);

String realPath = mergeStringWithSeparator(savePath,mf.getOriginalFilename());

File source = new File(realPath);

try {

mf.transferTo(source);

logger.debug("Upload file " + source.getAbsoluteFile() + " Success!");

} catch (Exception e) {

String errorMsg = "Upload file " + source.getAbsoluteFile() + " Error!" + e.getMessage();

logger.error(errorMsg);

throw new RuntimeException(errorMsg);

}

}

return "上传成功";

}

mergeStringWithSeparator函数如下:

public static String mergeStringWithSeparator(String...args){

StringBuilder sb=new StringBuilder();

for (String arg : args) {

sb.append(arg);

sb.append(File.separator);

}

return sb.substring(0, sb.length()-1).toString();

}

三、总结

今天在这里跟大家分享了一个小的文件上传demo。赶紧收藏,想要使用的时候就不需要自己想了。

欢迎转转发,关注哦。谢谢大家

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180710G1975300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券