import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSON;
import com.utils.PictureUploadUtils; //http://blog.youkuaiyun.com/llllvvv/article/details/75996964
@Controller
public class ImageController {
@ResponseBody
@RequestMapping(value = "/savepic", method = RequestMethod.POST)
public String savePic(HttpServletRequest request) {
String token = "";
long UID = -1;
String url = "";
String urlAliyun = "";
String key = "";// aliyun的key
try {
if (ServletFileUpload.isMultipartContent(request)) {//前端必须设置为图片上传类型
DiskFileItemFactory dff = new DiskFileItemFactory();
dff.setSizeThreshold(1024000);
ServletFileUpload sfu = new ServletFileUpload(dff);
FileItemIterator fii = null;
fii = sfu.getItemIterator(request);
while (fii.hasNext()) {
FileItemStream fis = fii.next();
try {
if (!fis.isFormField() && fis.getName().length() > 0) {
String fileName = fis.getName();
Pattern reg = Pattern.compile("[.]jpg|png|jpeg|gif|bmp$");
Matcher matcher = reg.matcher(fileName);
if (!matcher.find()) {
new Exception("图片类型错误");
break;
}
String tail = fileName.substring(fileName.lastIndexOf("."), fileName.length());
url = "pic" + tail;
BufferedInputStream in = new BufferedInputStream(fis.openStream());// 获得文件输入流
FileOutputStream a = new FileOutputStream(new File(url));
BufferedOutputStream output = new BufferedOutputStream(a);
Streams.copy(in, output, true);// 开始把文件写到你指定的上传文件夹
FileInputStream inputStream = new FileInputStream(new File(url));
key = "image/" + UID;
//图片上传的工具类在上篇文章
urlAliyun = PictureUploadUtils.UploadToAliyun(key, inputStream,tail.substring(1, tail.length()));
System.out.println("返回的图片url为: " + urlAliyun);
new File(url).delete();// 删除本地文件
} else {//遍历每一参数并取出值(文件上传类型除外)
String fname = fis.getFieldName();
if (fname != null && !fname.isEmpty() && fname.equals("token")) {
BufferedReader reader = new BufferedReader(new InputStreamReader(fis.openStream()));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
token = sb.toString();
} else {
BufferedReader reader = new BufferedReader(new InputStreamReader(fis.openStream()));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
UID = Long.parseLong(sb.toString());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (Exception ee) {
ee.printStackTrace();
}
try {
// 这里将uid,token,urlAliyun传给业务层保存数据库
// ......
} catch (Exception e) {
PictureUploadHelper.deletePicture(key);// 出现异常则删除阿里云上的图片
}
return JSON.toJSONString("这里是返回前端的数据");
}
}
springmvc Controller使用工具类完成上传图片到阿里云
最新推荐文章于 2023-11-27 14:51:25 发布