web项目获取用户上传的图片
我写的这些都是我在日常学习中遇到的问题,希望能对大家有帮助,也当做给自己的一份笔记。我自己也是网上找的一些资料学的可能不太好,如有错误,仅供参考
1.首先我们要使我们的web项目能够接收到前端网页上传过来的图片使用的到的jar包有 commons-fileupload-1.4.jar,commons-io-2.5.jar 这两个包,
下载方法1:我上传的连接
下载好了可以直接跳过方法二的下载过程,
下载方法2:
2.commons-io.jar包下载地址:http://commons.apache.org/proper/commons-io/.
commons-fileupload.jar下载地址:http://commons.apache.org/proper/commons-fileupload/
3.下载完成解压选择里面的第一个jar包导入项目即可,这里只贴出一张图,io包也是第一个 。
准备工作准备好了,下面就要开始上代码了。
前端网页:
<body>
<%-- 使用方法method="post" 这里必须给他加上类型 enctype="multipart/form-data"--%>
<form action="/servlet?method=xx" method="post" enctype="multipart/form-data">
<%-- 提交后调用xx方法--%>
<input type="hidden" name="method" value="xx">
<img id="image" class="image"/>
<input id="imageFile" type="file" name="imageFile" accept="image/png,image/jpg,image/jpeg,image/bmp"/>
<input type="submit" name="method" value="提交">
</form>
//导入jquerey 用于回显图片 ,没有jquery也没事,只是页面上不会显示你选择的图片,
<script src="js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script>
//当选着文件后内容被改变调用方法
$("#imageFile").change(function () {
var file = this.files[0];
if (window.FileReader) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onloadend = function (e) {
$("#image").attr("src", e.target.result);
};
}
});
</script>
</body>
后端代码:
//这里使用的是注解方式
@WebServlet(urlPatterns = "/servlet")
//使用的BaseServlet工具类,没有的直接继承 HttpServlet 写在dopost方法中也可以
public class servlet extends BaseServlet {
public void xx() throws Exception {
//创建一个 获取解析器的 对象
DiskFileItemFactory factory = new DiskFileItemFactory();
//获取解析器
ServletFileUpload sfu = new ServletFileUpload(factory);
//使用解析器去解析request对象 获取到的是form表里的所有内容 有表单项或者文件项
HttpServletRequest request = getRequest();
List<FileItem> fileItems = sfu.parseRequest(request);
for (FileItem fileItem : fileItems) {
//判断是不是表单项(自我了解:表单里就能展示的内容) , 如果是文件或者其他返回false
if (fileItem.isFormField()) {
//如果是表单里面,并且不是文件的内容,就将他放入对象的属性中 这里我们没有做其他属性所以只有一个图像文件
} else {
//获取这个文件夹的绝对路径 :给一个文件夹的相对路径帮你获取绝对路径
String realPath = this.getServletContext().getRealPath("/ytx");
System.out.println(realPath);
//搞一个uuid 用于放在图片名称前面 以免图片重复名称
String uuid = CommonUtils.uuid();
System.out.println(uuid);
//获取图片的名称 并加上uuid
String filename = uuid+fileItem.getName() ;
//使用目录绝对路径和文件名创建目标文件
File file = new File(realPath, filename);
//将文件写出到创建好的文件中,
fileItem.write(file);
//这里就是图片的路径了
String 图片的相对路径 = "ytx/" + filename;
System.out.println(图片的相对路径);
}
}
System.out.println("结束");
}
}
上传的图片是在编译后项目下的文件夹里,就是out 里面的文件夹里才会看到你的图片。
好了希望大家都能学废,,哈哈