啥也不说,直接上代码
//maven项目依赖地址
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
/**
* 适用于apache下的fileupload jar包:处于底层servlet控制器
* @param req
* @param savePath
* @param image
* @return
* @throws IOException
* @throws FileUploadException
*/
private Image saveImg(HttpServletRequest req, HttpServletResponse resp,String savePath, Image image) throws IOException, FileUploadException {
String token = req.getParameter("token");
//对token值的处理
if (!Objects.equals(token, artSaveImgKey)) {
image.setError(1);
return image;
}
//获取前段图片
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
//创建核心解析类
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
//将上传资源打包成list
List<FileItem> list = servletFileUpload.parseRequest(req);
//传入service处理并返回image对象
//遍历上传的所有图片
for (FileItem fileItem :
list) {
if (fileItem.isFormField()) {
continue;
}
//获取图片名称
String fileName = fileItem.getName();
//工具类生成图片名称
String uuidFileName = UuidUtil.getUuidFileName(fileName);
//获取输入流
InputStream inputStream = fileItem.getInputStream();
//获取文件上传的路径:
String path = this.getServletContext().getRealPath(savePath);
//对接输出流
String saveURL = path + "\\" + uuidFileName;
OutputStream outputStream = new FileOutputStream(saveURL);
int len = 0;
byte[] b = new byte[1024];
while ((len = inputStream.read(b)) != -1) {
outputStream.write(b,0,len);
}
inputStream.close();
outputStream.close();
//设置image对象
// 返回图片访问路径
String url = req.getScheme() + "://" + req.getServerName()
+ ":" + req.getServerPort() + "/images/articleImg/" + uuidFileName;
image.setUrl(url);
}
//返回结果
return image;
}
//这个是自建Image对象:适用需要返回url和error值的编辑器
package beans;
public class Image extends Img {
private int error;
private String url;
public Image() {
}
@Override
public String toString() {
return "Image{" +
"error='" + error + '\'' +
"url='" + url + '\'' +
'}';
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getError() {
return error;
}
public void setError(int error) {
this.error = error;
}
}
//超好用的转json工具类
package web.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class WriteUitl {
/**
* 直接将传入的对象序列化为json,并且写回客户端
* @param obj
*/
public static void writeValue(Object obj, HttpServletResponse response) throws IOException {
ObjectMapper mapper = new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
mapper.writeValue(response.getOutputStream(),obj);
}
/**
* 将传入的对象序列化为json,返回
* @param obj
* @return
*/
public static String writeValueAsString(Object obj) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(obj);
}
}
//就是最后在主方法中调用一下上面的工具类就ok,简单演示如下
private void saveHeadImg(HttpServletRequest req, HttpServletResponse resp) throws FileUploadException, IOException {
Image image = new Image();
image = saveImg(req, resp,"/images/articleImg",image);
//向后端传送json数据代码
WriteUitl.writeValue(image, resp);
}
//简单写一下前段代码,哦嘿嘿详细吧
//给按钮绑定点击事件
$("#uploadBtn").on('click',function () {
loadPreImg();
});
function loadPreImg(){
//获取上传的图片信息的
var key = $("#text-user").val();//这个是对应前面工具类中的token值,简单防止损流量攻击,还是得要过滤器,怎么生成随意
var photo = $("#reportXML")[0].files[0];
var params = new FormData();
params.append('file',photo);
$.ajax({
url:"/content/art/saveHeadImg.do?token="+key,
type:"post",
data:params,
cache: false,
contentType: false,
processData: false,
success:function (data) {
alert(data.url);
}
});
}
<!--最后就是html中的input了-->
<form id="uploadForm" enctype="multipart/form-data" style="display: inline-block; " >
<input class="chooseFile" accept=".jpg,.jpeg,.png" id="reportXML" type="file" name="file" /> 浏览
</form>
<!--被绑定的可怜按钮-->
<button class="art-title-photo-upload" id="uploadBtn">上传</button>