java实现图片上传,上传后返回浏览地址
时间: 2023-08-16 09:05:51 浏览: 199
实现图片上传一般需要以下步骤:
1. 在前端页面中添加一个文件上传的input元素,设置其type为file,让用户可以选择本地的图片文件进行上传。
2. 在后端服务器中编写一个接收文件上传请求的接口,并且在接口中对上传的文件进行处理,比如保存到服务器的指定目录中。
3. 在处理完上传的文件后,生成一个该图片的浏览地址,并将该地址返回给前端页面。
下面是一个简单的Java代码示例,用于实现图片上传并返回浏览地址:
前端页面:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图片上传</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">上传</button>
</form>
<div id="result"></div>
<script>
// 使用ajax提交表单
var form = document.querySelector('form');
form.addEventListener('submit', function(event) {
event.preventDefault();
var xhr = new XMLHttpRequest();
xhr.open('POST', '/upload');
xhr.onload = function() {
if (xhr.status === 200) {
var result = JSON.parse(xhr.responseText);
var link = document.createElement('a');
link.href = result.url;
link.textContent = result.url;
document.querySelector('#result').appendChild(link);
} else {
alert('上传失败:' + xhr.statusText);
}
};
var formData = new FormData(form);
xhr.send(formData);
});
</script>
</body>
</html>
```
后端Java代码:
```java
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.fasterxml.jackson.databind.ObjectMapper;
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 设置上传文件的保存目录
private static final String UPLOAD_DIR = "uploads";
private static final String BASE_DIR = "/var/www/html/";
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("application/json");
// 判断上传的请求是否为multipart/form-data类型
if (!ServletFileUpload.isMultipartContent(req)) {
resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return;
}
// 创建一个DiskFileItemFactory对象,用于在磁盘上存储文件
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
// 创建ServletFileUpload对象,并设置上传文件的最大大小
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(1024 * 1024 * 10);
try {
// 解析请求,并获取上传文件的FileItem对象
FileItem fileItem = upload.parseRequest(req).stream()
.filter(item -> !item.isFormField())
.findFirst().orElse(null);
if (fileItem == null) {
resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return;
}
// 生成一个唯一的文件名
String fileName = UUID.randomUUID().toString() + ".jpg";
// 构建上传文件的保存路径
String savePath = BASE_DIR + UPLOAD_DIR + File.separator + fileName;
// 保存上传文件
fileItem.write(new File(savePath));
// 构建上传文件的浏览地址
String url = "http://localhost/" + UPLOAD_DIR + "/" + fileName;
// 返回上传文件的浏览地址
ObjectMapper mapper = new ObjectMapper();
resp.getWriter().write(mapper.writeValueAsString(new UploadResult(url)));
} catch (Exception e) {
resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
e.printStackTrace();
}
}
private static class UploadResult {
private String url;
public UploadResult(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
}
}
```
在上面的代码中,我们使用了Apache Commons FileUpload库来处理文件上传请求,并且使用Jackson库来将上传结果转化为JSON格式。在处理完上传文件后,我们返回一个包含图片浏览地址的JSON对象给前端页面。
阅读全文