javaweb中上传图片并显示图片,用我要上传课程信息(里面包括照片)这个例子说明
原理: 从客户端上传到服务器 照片——文件夹——数据库
例如:桌面一张照片,在tomacat里创建upload文件夹,把桌面照片上传到upload文件夹里,并且把照片的名字取出来,取完名字把这个名字插入到数据库里面,下次要想取就取这个名字到upload文件夹下面去寻找这个照片,找到以后写相对路径,就可以在页面上显示照片。
所以我数据库的类型是照片的路径是varchar字符串类型
注:tomacat服务器是用eclipse敲代码的开发工具启动的,每一个都会把最新的源代码覆盖原有的所有代码,所有tomacat重启后照片会消失(真正的开发是编码和服务器不在一起不会出现以上情况)
例如:我要上传课程信息(里面包括照片)
1.上传课程信息jsp页面uploadcourse.jsp
<body background="image/zzz.jpg">
<div id="zt" style="height:960px;width:960px">
<div id="upld" style="height:300px;width:300px;margin-left: 300px;margin-top: 100px;">
<table>
<form action="CourseServlet?method=upload" method="post" enctype="multipart/form-data">
<tr>
<td style="text-align:center;"colspan="2"><font size="5">上传课程</font></td>
<tr height="40px">
<td><div style="width:100px">课程名称:<div></td>
<td> <input type="text" name="name" id="name"></td>
</tr>
<tr height="40px">
<td>课程描述:</td>
<td><input type="text" name="detail" id="detail"></td>
</tr>
<tr height="40px">
<td>封面图片:</td>
<td><input type="file" name="picture" id="picture"></td>
</tr>
<td height="40px">课程讲师:</td>
<td><input type="text" name="teacher" id="teacher"></td>
</tr>
<tr height="40px">
<td><input type="reset" value="重置"></td>
<td colspan="2" style="padding-left: 120px;"><input type="submit" value="提交"></td>
</tr>
</form>
</table>
</div>
</div>
</body>
2. 点击查看已上传课程按钮后触发活动xyadmin.jsp
<div style="height:100px"><a href="CourseServlet?method=displayCourse" target="middle">查看已上传课程</a></div>
3.显示课程信息jsp页面displayCourse.jsp
<table border="0"cellspacing="0" cellpadding="0">
<tr>
<td style="width:50px;text-align: center">序号</td>
<td style="width:100px;text-align: center">课程名</td>
<td style="text-align: center">课程讲述</td>
<td style="text-align: center">封面图片</td>
<td style="width:100px;text-align: center">课程讲师</td>
<td style="width:100px;text-align: center">相关视频</td>
</tr>
<c:forEach items="${list_displaycourse}" var="course" varStatus="i">
<tr style="background:#7FFFD4">
<form action="CheckVideoServlet?method=checkvideo" method="post" target="middle">
<td style="width:50px;text-align: center">${i.count} </td>
<input type="hidden" name="c_id" id="c_id" value="${course.c_id} ">
<td style="width:100px;text-align: center">${course.c_name}</td>
<td style="text-align: center"><font style="font-size:12px;">${course.c_detail}</font></td>
<td style="text-align: center"><img width="100px" height="50px" src="upload/${course.c_picture}"/></td>
<td style="width:100px;text-align: center">${course.c_teacher}</td>
<td style="text-align: center"><input type="submit" value="查看"></td>
</form>
</tr>
</c:forEach>
后台CourseServlet(包含上传课程信息与显示课程信息两个处理逻辑)
public void upload(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String filename = null;
// 获得磁盘文件条目工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 获取文件需要上传到的路径
String path = request.getRealPath("/upload");
// 如果没以下两行设置的话,上传大的 文件 会占用 很多内存,
// 设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同
/**
* 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem
* 格式的 然后再将其真正写到 对应目录的硬盘上
*/
factory.setRepository(new File(path));
// 设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室
factory.setSizeThreshold(1024 * 1024);
// 高水平的API文件上传处理
ServletFileUpload upload = new ServletFileUpload(factory);
InputStream in =null;
byte[] buf=null;//字节数组表示照片
try {
// 可以上传多个文件
List<FileItem> list = (List<FileItem>) upload.parseRequest(request);
for (FileItem item : list) {
// 获取表单的属性名字
String name = item.getFieldName();// title
// 如果获取的 表单信息是普通的 文本 信息
if (item.isFormField()) {
// 获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的,表示表单的普通文本,如下拉列表,文本框,密码框等
String value = item.getString("UTF-8");// title content,设置格式防止出现乱码不匹配的情况
request.setAttribute(name, value);
}
// 对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些
else {
/**
* 以下三步,主要获取 上传文件的名字,表示文本是上传控件
* 名字采用随机的方式设置的
*/
// 获取路径名
String value = item.getName();
String suffix = value.substring(value.lastIndexOf("."));
filename = "pro"+String.valueOf(((new Date()).getTime())%10000000)+suffix;
request.setAttribute(name, filename);
// 真正写到磁盘上
// 它抛出的异常 用exception 捕捉
// item.write( new File(path,filename) );//第三方提供的
// 手动写的,是将我电脑里的照片写在我服务器建立的upload文件夹下下面
OutputStream out = new FileOutputStream(new File(path,
filename));
in = item.getInputStream();
int length = 0;
buf = new byte[1024];//读1024个字节
System.out.println("获取上传文件的总共的容量:" + item.getSize());
// in.read(buf) 每次读到的数据存放在 buf 数组中
while ((length = in.read(buf)) != -1) {
// 在 buf 数组中 取出数据 写到 (输出流)磁盘上
out.write(buf, 0, length);
}
in.close();
out.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
//以上servlet代码除了红字外其余都不变
String name=request.getAttribute("name").toString();
String detail=request.getAttribute("detail").toString();
String teacher=request.getAttribute("teacher").toString();
Course course=new Course();
course.setC_name(name);
course.setC_detail(detail);
course.setC_teacher(teacher);
course.setC_picture(filename);//核心代码,把filename的字符串给video.setImages插入数据库
boolean flag= courseService.uploadCourse(course);
if(flag){//上传成功
request.getRequestDispatcher("xyadmin.jsp").forward(request, response);
}else{
request.getRequestDispatcher("uploadcourse.jsp").forward(request, response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String method=request.getParameter("method");
if("upload".equals(method)){
upload(request,response);
}else if("displayCourse".equals(method)){
List<Course> listCourse=courseService.displayCourse();
request.setAttribute("list_displaycourse", listCourse);
request.getRequestDispatcher("displayCourse.jsp").forward(request, response);
}
}
javaweb中上传图片并显示图片,用我要上传课程信息(里面包括照片)这个例子说明的更多相关文章
- COS上传图片和显示图片
写这篇文章之前,我也是刚刚实现COS上传和显示图片.我百度了好多相关文章,COS上传图片成功的文章不少,上传后显示图片的文章几乎没有.于是写一篇记录下. COS上传图片推荐链接:https://blo ...
- Bootstrap中data-src无法显示图片,但是src可以
在学习bootstrap时,书中的源码是用的data-src来定义图像位置,但是我在使用的时候无法显示图片:data-src可以在img标签中使用来显示图片吗?我使用src可以,而是用data-src ...
- Android4.4中WebView无法显示图片解决方案
在Android4.4之前我们在使用WebView时为了提高加载速度我设置了(myWebView.getSettings().setBlockNetworkImage(true);//图片加载放在最后 ...
- Android上传图片到PHP服务器并且支持浏览器上传文件(word、图片、音乐等)
暑假已经过了一半了,这才完成计划当中的第二个任务.虽然进度是慢了点.但也算是暑假的收获吧.下面我就把我学习当中的收获记录在此. 还是跟以往一样,先上图片. 操作的步骤:打开程序---->选择上传 ...
- 微信开发中使用微信JSSDK和使用URL.createObjectURL上传预览图片的不同处理对比
在做微信公众号或者企业微信开发业务应用的时候,我们常常会涉及到图片预览.上传等的处理,往往业务需求不止一张图片,因此相对来说,需要考虑的全面一些,用户还需要对图片进行预览和相应的处理,在开始的时候我使 ...
- ajax 提交所有表单内容及上传图片(文件),以及单独上传某个图片(文件)
我以演示上传图片为例子: java代码如下(前端童鞋可以直接跳过看下面的html及js): package com.vatuu.web.action; import java.io.File; imp ...
- 适应各浏览器图片裁剪无刷新上传jQuery插件(转)
看到一篇兼容性很强的图片无刷新裁剪上传的帖子,感觉很棒.分享下!~ 废话不多说,上效果图. 一.首先建立如下的一个page <!DOCTYPE html> <html xmlns=& ...
- puzz: 图片和表单上传的不一致问题
1. 方向1 用户提交表单, 图片和表单同步上传.(由同一服务器处理, 服务器压力大. 没有分离) 2. 方向2 图片和表单分开上传. 如图片访问ftp,表单提交后台(图片和后台分离) 2 ...
- 使用ajax上传图片,并且使用canvas实现出上传进度效果
前端代码: <%@ page contentType="text/html;charset=UTF-8" language="java" %> &l ...
随机推荐
- CF F. Shovels Shop(前缀和预处理+贪心+dp)
F. Shovels Shop time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- python基础之面向对象1
一.面向对象VS面向过程 1.面向过程 2.面向对象 二.类与对象 1.类和对象 (1)基本概念 类和对象的内存图如下: 2.实例成员 (1)实例变量 (2)实例方法: 3.类成员: (1)类变量 ( ...
- javabean简介
Javabean简介 JavaBean是一个可重复使用的软件组件.实际上JavaBean是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称bean.由于javabean是 ...
- BOM与DOM操作
BOM: OM-JavaScript是运行在浏览器中的,所以提供了一系列对象用于和浏览器窗口进行交互,这些对象主要包括window.document.location.navigator和screen ...
- for循环语句/命名函数
for(1.表达式1;2.表达式2;3.表达式3){ 4.循环体语句; } 先执行1,在执行2表达式,如果2的表达式为false的话直接退出循环, 如果2的表达式结果为true,执行4,执行3,执行2 ...
- muse-ui底部导航自定义图标和字体颜色
最近在鼓捣用vue.js进行混合APP开发,遍寻许久终于找到muse-ui这款支持vue的轻量级UI框架,竟还支持按需引入,甚合萝卜意! 底部导航的点击波纹特效也是让我无比惊喜,然而自定义图标和字体颜 ...
- Python-字典与json的转换
#json是字符串,只不过长得像字典 import json user_info='''{"niuhy":1234,"shanbl":44566}''' #js ...
- Java中的队列同步器AQS
一.AQS概念 1.队列同步器是用来构建锁或者其他同步组件的基础框架,使用一个int型变量代表同步状态,通过内置的队列来完成线程的排队工作. 2.下面是JDK8文档中对于AQS的部分介绍 public ...
- 【安富莱】【RL-TCPnet网络教程】第8章 RL-TCPnet网络协议栈移植(RTX)
第8章 RL-TCPnet网络协议栈移植(RTX) 本章教程为大家讲解RL-TCPnet网络协议栈的RTX操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就比较容易了,主要 ...
- [Swift]LeetCode433. 最小基因变化 | Minimum Genetic Mutation
A gene string can be represented by an 8-character long string, with choices from "A", &qu ...