springmvc Controller使用工具类完成上传图片到阿里云

来源:互联网 发布:田岛绣花软件 编辑:程序博客网 时间:2024/06/16 09:01
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.csdn.net/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("这里是返回前端的数据");  }  }  


原创粉丝点击