码迷,mamicode.com
首页 > Web开发 > 详细

上传图片到阿里云OSS的步骤

时间:2016-06-17 12:23:56      阅读:1660      评论:0      收藏:0      [点我收藏+]

标签:

啥都不说  直接上代码

1.html:

<form action="/bcis/api/headImgUpload.json" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="提交">
</form>

2.contraller:

 @RequestMapping(value = "/headImgUpload.json", method = RequestMethod.POST)
  @ResponseBody
  public Map<String, Object> headImgUpload(HttpServletRequest request,MultipartFile file) {
    Map<String, Object> value = new HashMap<String, Object>();
    value.put("success", true);
    value.put("errorCode", 0);
    value.put("errorMsg", "");
    try {
      String head = userService.updateHead(file, 4);//此处是调用上传服务接口
      value.put("data", head);
    } catch (IOException e) {
      e.printStackTrace();
      value.put("success", false);
      value.put("errorCode", 200);
      value.put("errorMsg", "图片上传失败");
    }
    return value;
  }

3.service   此处要把

@Autowired
private OSSClientUtil ossClient;注进来
@Override
  public String updateHead(MultipartFile file, long userId) throws IOException{
    String url = ImgUploadUtil.uploadImg(file, "head");
    File fileOnServer = new File(url);
    FileInputStream fin;
    try {
      fin = new FileInputStream(fileOnServer);
      String[] split = url.split("/");
      String s = ossClient.uploadFile2OSS(fin, split[split.length - 1]);
      System.out.println(s);
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }
    userDao.updateHead(userId, url);//此处更新用户头像
    return SystemConstant.IMG_URL_PREFIX + url;
  }

 4. ImgUploadUtil帮助类

public class ImgUploadUtil {

  public static final String IMG_DIR = “/img/”;

  public static final String IMG_URL_PREFIX ="http://127.0.0.1:8080";



  /**
   * 将图片上传到服务器
   *
   * @param imgFile
   * @param type
   * @return
   */
  public static String uploadImg(MultipartFile imgFile, String type) throws IOException ,ImgException{
    if (imgFile.getSize() > 1024 * 1024) {
      throw new ImgException("上传图片大小不能超过1M!");
    }
    SimpleDateFormat formater = new SimpleDateFormat("yyyyMMdd");
    String dirPath = ImgUploadUtil.IMG_DIR + type + "/" + formater.format(new Date());

    File dir = new File(dirPath);
    if (!dir.exists()) {
      dir.mkdirs();
    }
    String fileName = ImgUploadUtil.getName(imgFile.getOriginalFilename());
    if (!fileName.endsWith("png") && !fileName.endsWith("jpg") && !fileName.endsWith("gif")
      && !fileName.endsWith("jpeg") && !fileName.endsWith("bmp")) {
      throw new ImgException("上传图片请为png、jpg、gif、jpeg、bmp中的一种!");
    }
    //原图,用于点击图片后查看原图
    File fileOnServer = new File(dirPath + "/" + fileName);
    imgFile.transferTo(fileOnServer);
    return dirPath + "/" + fileName;
  }

  /**
   * 依据原始文件名生成新文件名
   *
   * @return
   */
  private static String getName(String fileName) {
    Random random = new Random();
    return random.nextInt(10000) + System.currentTimeMillis() + ImgUploadUtil.getFileExt(fileName).toLowerCase();
  }

  /**
   * 获取文件扩展名
   *
   * @return string
   */
  private static String getFileExt(String fileName) {
    return fileName.substring(fileName.lastIndexOf("."));
  }

}

5.上传的阿里云的帮助类OSSClientUtil 

public class OSSClientUtil {
	
	Log log = LogFactory.getLog(OSSClientUtil.class);
	// endpoint以杭州为例,其它region请按实际情况填写
	private String endpoint = "http://oss-cn-hzfinance.aliyuncs.com";
	// accessKey
	private String accessKeyId = "您的accessKeyId ";
	private String accessKeySecret = "您的accessKeySecret ";
	//空间
	private String bucketName ="您的bucketName ";
	//文件存储目录
	private String filedir= "data/";

	private  OSSClient ossClient;
	
	public OSSClientUtil(){
		ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
	}
	/**
	 * 初始化
	 */
	public void init(){
		ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
	}
	/**
	 * 销毁
	 */
	public void destory(){
		ossClient.shutdown();
	}
	
	/**
	 * 上传到OSS服务器  如果同名文件会覆盖服务器上的
	 * @param instream  文件流
	 * @param fileName  文件名称 包括后缀名
	 * @return  出错返回"" ,唯一MD5数字签名 
	 */
	 public String uploadFile2OSS(InputStream instream ,String fileName){
		 String ret = "";
	        try {
	        	//创建上传Object的Metadata  
		        ObjectMetadata objectMetadata=new ObjectMetadata();  
				objectMetadata.setContentLength(instream .available());
				objectMetadata.setCacheControl("no-cache");  
		        objectMetadata.setHeader("Pragma", "no-cache");  
		        objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf("."))));  
		        objectMetadata.setContentDisposition("inline;filename=" + fileName);  
		       //上传文件  
		        PutObjectResult putResult = ossClient.putObject(bucketName, filedir + fileName, instream , objectMetadata);  
		        
		        ret =  putResult.getETag();  
			} catch (IOException e) {
				log.error(e.getMessage(),e);
			}finally{
				try {
					instream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
	        return ret;
	    }
	 	/**
	 	 * 从OSS获取文件 
	 	 * @param filename 文件名
	 	 * @return InputStream 调用方法把流关闭  文件不存在返回null
	 	 */
	 	public InputStream downFileFromOSS(String filename){ 
	 		boolean fileExist = ossClient.doesObjectExist(bucketName, filedir+ filename);
	 		if(!fileExist)
	 			return null;
	        OSSObject ossObj = ossClient.getObject(bucketName, filedir+ filename);  
	        return ossObj.getObjectContent();     
	     }  
	      
	   /**
	    * 根据文件名删除OSS服务器上的文件  
	    * @param filename
	    * @return
	    */
	    public String deleteFile(String filename){    
	    	boolean fileExist = ossClient.doesObjectExist(bucketName, filedir+ filename);
	 		if(fileExist){
	 			ossClient.deleteObject(bucketName, filedir+ filename);  
	 			return "delok";
	 		}
	 		else
	 			return filename+" not found";
	    }  
	      
	   
	     /** 
	     * Description: 判断OSS服务文件上传时文件的contentType 
	     * @param FilenameExtension 文件后缀 
	     * @return String  
	     */  
	     public static String getcontentType(String FilenameExtension){  
		        if(FilenameExtension.equalsIgnoreCase("bmp")){return "image/bmp";}  
		        if(FilenameExtension.equalsIgnoreCase("gif")){return "image/gif";}  
		        if(FilenameExtension.equalsIgnoreCase("jpeg")||  
		           FilenameExtension.equalsIgnoreCase("jpg")||     
		           FilenameExtension.equalsIgnoreCase("png")){return "image/jpeg";}  
		        if(FilenameExtension.equalsIgnoreCase("html")){return "text/html";}  
		        if(FilenameExtension.equalsIgnoreCase("txt")){return "text/plain";}  
		        if(FilenameExtension.equalsIgnoreCase("vsd")){return "application/vnd.visio";}  
		        if(FilenameExtension.equalsIgnoreCase("pptx")||  
		            FilenameExtension.equalsIgnoreCase("ppt")){return "application/vnd.ms-powerpoint";}  
		        if(FilenameExtension.equalsIgnoreCase("docx")||  
		            FilenameExtension.equalsIgnoreCase("doc")){return "application/msword";}  
		        if(FilenameExtension.equalsIgnoreCase("xml")){return "text/xml";}  
		        return "image/jpeg";  
	     }  
	     
}

6.需要引入的jar包:gradle配置为:

compile ‘com.aliyun.oss:aliyun-sdk-oss:2.2.3‘

 

上传图片到阿里云OSS的步骤

标签:

原文地址:http://www.cnblogs.com/baizhanshi/p/5593431.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!