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

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("这里是返回前端的数据");  
	}  
}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值