图片上传是业务需求中常见的功能,最基础的是单图片的上传。比较复杂的多图片上传,都是基于单图片上传。

Form表单上传

h5的原生表单上传图片,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Seahorse</title>
</head>
<body>
<form action="/uploadRaw" method="post" enctype="multipart/form-data">
<input type="file" name="picture"/>
<input type="submit"/>
</form>
</body>
</html>

需要注意的是,在form标签中需要添加属性 enctype="multipart/form-data"

采用这种方式发送数据时,采用chrome查看请求报文时,发现没有Form Data这一栏。

后端采用SpringMvc接收,SpringMvc可以自动封装前端传递过来的数据,代码如下:

    @PostMapping("/uploadRaw")
public ResponseEntity<?> uploadRaw(MultipartFile picture) {
System.out.println(picture.getOriginalFilename()); return ResponseEntity.ok("done");
}

这样可以正常接收到一个 org.springframework.web.multipart.MultipartFile 对象,有时需要将 MultipartFile 转换成 java.io.File 对象,然后在调用图片服务器的接口将 File 对象上传至图片服务器。

转化的方法:https://stackoverflow.com/questions/24339990/how-to-convert-a-multipart-file-to-file

转化的方法一:

public File multipartToFile(MultipartFile multipart) throws IllegalStateException, IOException {
File convFile = new File( multipart.getOriginalFilename());
multipart.transferTo(convFile);
return convFile;
}

采用FormData对象上传

将图片对象添加到FormData对象中,然后通过ajax发送,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Seahorse</title> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>
<body> <input id="image" type="file" multiple/>
<br/><br/>
<button id="upload">submit</button>
<br/><br/>
<div id="vessel"></div> </body> <script>
$(function () { $('#upload').click(function () {
var formData = new FormData();
formData.append('picture', $('#image')[0].files[0]);
$.ajax({
url: '/uploadFormData',
type: 'POST',
cache: false,
data: formData,
processData: false,
contentType: false
}).done(function(res) { });
}); // Picture echo
$('#image').change(function () {
var files = this.files;
var length = files.length;
$.each(files, function (key, value) {
var filereader = new FileReader();
filereader.readAsDataURL(files[key]);
filereader.onloadend = function (e) {
$('#vessel').append('<img src='+ e.target.result +'></img>');
}; });
});
});
</script>
</html>

采用chrome查看请求报文时,有Form Data这一栏

后端接收仍然采用SpringMvc,代码如下:

    @PostMapping("/uploadFormData")
public ResponseEntity<?> uploadFormData(MultipartFile picture) {
System.out.println(picture.getOriginalFilename());
return ResponseEntity.ok("done");
}

图片保存至服务器

如果购买了图片服务器,一般会提供相应的api,配置好信息,调用api就可以上传图片。

如果没有购买图片服务器,想将图片上传至项目所在的服务器,这个时候只需要调用 org.apache.commons.io.FileUtils.copyFile( source, destination ) 就可以复制到目标文件夹。

End

Html5学习笔记:图片上传的更多相关文章

  1. LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android

    LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android jincon 发表于 2015-02-26 18:31:01 发表在: php开发 localresiz ...

  2. 基于html5的多图片上传,预览

    基于html5的多图片上传 本文是建立在张鑫旭大神的多文图片传的基础之上. 首先先放出来大神多图片上传的博客地址:http://www.zhangxinxu.com/wordpress/2011/09 ...

  3. HTML5 FileReader实现图片上传前预览

    如果你的浏览器支持Html5的FileReader的话,实现图片上传前进行预览是一件非常容易之事情. 在控制器,创建一个视图Action: jQuery代码: 实时演示一下: 下面内容于2014-11 ...

  4. HTML5移动端图片上传模块

    上传图片的功能是极为常用的,之前做过一个移动端上传文件的功能(基于jquery的),总结梳理一下. html <div class="uploadPic clearBox"& ...

  5. 简单的html5 File base64 图片上传

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. ASP代码审计学习笔记 -3.上传漏洞

    1.ASP上传过程抓包分析: POST /4.asp HTTP/1.1 Host: 192.168.1.102 User-Agent: Mozilla/5.0 (Windows NT 10.0; WO ...

  7. Spring MVC学习笔记——文件上传

    1.实现文件上传首先需要导入Apache的包,commons-fileupload-1.2.2.jar和commons-io-2.1.jar 实现上传就在add.jsp文件中修改表单 enctype= ...

  8. 1.6(Spring MVC学习笔记)文件上传与下载

    一.文件上传 实现文件上传多数是采用表单提交数据, 但对于进行文件上传的表单需要满足一下几个条件 1.表单的method设置为post 2.表单的enctype设置为multipart/form-da ...

  9. 学习笔记-git 上传

    0.git add * (如果你需要修改源码需要在 1 之前使用,然后再回到 1) 1.git commit -m '提交文字描述' 2.git push -u origin master (上传到主 ...

  10. html5+js压缩图片上传

    最近在折腾移动站的开发,涉及到了一个手机里面上传图片.于是经过N久的折腾,找到一个插件,用法如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...

随机推荐

  1. C#编程经验-VS Debug

    F11 OneStepDebugF10 ProcessDebugbreakPointDebug(quick location,then use one step debug)

  2. Python打包之pyinstaller

    Pyinstaller 进行对应目录下的打包 执行完后请注意建议将该m2的拷贝走 加了参数-w后不会出现黑色控制台的窗子 常用参数说明: –icon=图标路径 -F 打包成一个exe文件 -w 使用窗 ...

  3. nginx支持ipv6

    今天碰到的问题是nginx对于ipv6的请求没有日志,顺便查了一下,nginx对ipv6的支持. nginx -v查看nginx是否支持ipv6,出现--with-ipv6,则是支持nginx的,否则 ...

  4. 20165312 2017-2018-2 《JAVA程序设计》第3周学习总结

    20165312 2017-2018-2 <JAVA程序设计>第3周学习总结 一.第四章知识点总结 1.类 类的实现包括两个部分:类声明和类体. class是关键字,用来定义类. clas ...

  5. 刘志梅 201771010115 《面向对象程序设计(java)》 第七周学习总结

    实验七 继承附加实验 实验时间 2018-10-11 1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: 即将类中的域标记为private,而方法标记为public.任何声明为priv ...

  6. wampserver_x86_3.0.6 允许外网访问配置教程

    1.打开wamp目录下的apache配置文件中的httpd.conf 用可以看行数的编辑器打开 大概244行: 改为 <Directory /> AllowOverride none Re ...

  7. k8s学习笔记之三:k8s快速入门

    一.前言 kubectl是apiserver的客户端工具,工作在命令行下,能够连接apiserver上实现各种增删改查等各种操作 kubectl官方使用文档:https://kubernetes.io ...

  8. 解决strcmp的错误以及VS的快捷键

    主要是C++数组作业中发现的一些问题. 第一点是关于strcat函数 我用VS2018调用strcat的时候报错,错误信息提示strcat不安全(?)要用strcat_s.修改后,可成功运行. 但这两 ...

  9. Java 中 Gson的使用

    JSON 是一种文本形式的数据交换格式,它比XML更轻量.比二进制容易阅读和编写,调式也更加方便;解析和生成的方式很多,Java中最常用的类库有:JSON-Java.Gson.Jackson.Fast ...

  10. 卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)

    分享一些公式计算张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算. 以AlexNet网络为例,以下是该网络的参数结构图. AlexNet网络的层结构如下: 1.Input:       图 ...