javaweb实现上传图片且预览
时间: 2023-10-25 14:09:53 浏览: 50
实现上传图片并预览,需要以下步骤:
1. 在前端页面添加一个input标签,type属性设置为file,用于选择本地图片上传。
```
<input type="file" id="fileInput" onchange="previewImage()"/>
```
2. 在前端页面添加一个用于预览图片的标签,例如img标签。
```
<img id="preview" src="" alt="预览图片" style="max-width:200px;max-height:200px;">
```
3. 在JavaScript中实现预览图片的功能。
```
function previewImage() {
// 获取选择的文件对象
var file = document.getElementById("fileInput").files[0];
// 创建FileReader对象
var reader = new FileReader();
// 读取文件内容
reader.readAsDataURL(file);
// 当文件读取完成时触发onload事件
reader.onload = function(e) {
// 获取预览图片的标签对象
var preview = document.getElementById("preview");
// 设置预览图片的地址
preview.src = e.target.result;
}
}
```
4. 在后端处理上传的图片。
实现上传图片的后端代码可以使用Java提供的Servlet或Spring MVC框架等进行实现。
以下是一个简单的Servlet上传图片的示例代码:
```
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上传的文件对象
Part part = request.getPart("file");
// 获取文件名
String fileName = part.getSubmittedFileName();
// 获取文件保存的路径
String savePath = request.getServletContext().getRealPath("/upload");
// 创建保存文件的目录
File saveDir = new File(savePath);
if (!saveDir.exists()) {
saveDir.mkdirs();
}
// 生成保存文件的唯一名称
String uuid = UUID.randomUUID().toString();
String saveName = uuid + "_" + fileName;
// 保存文件
part.write(savePath + File.separator + saveName);
// 返回保存的文件路径
String filePath = request.getContextPath() + "/upload/" + saveName;
response.getWriter().write(filePath);
}
```
在前端页面中,可以使用Ajax将选择的图片文件上传到后端进行处理,并将返回的文件路径设置到预览图片的标签中。
```
function uploadImage() {
var file = document.getElementById("fileInput").files[0];
// 创建FormData对象,用于封装需要上传的数据
var formData = new FormData();
formData.append("file", file);
// 创建XMLHttpRequest对象
var xhr = new XMLHttpRequest();
// 设置请求方式和请求地址
xhr.open("POST", "/uploadServlet");
// 发送请求
xhr.send(formData);
// 当请求状态改变时触发onreadystatechange事件
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
// 获取预览图片的标签对象
var preview = document.getElementById("preview");
// 设置预览图片的地址
preview.src = xhr.responseText;
}
}
}
```