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

啥都不说  直接上代码

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   此处要把

@Autowiredprivate 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‘
时间: 2024-10-10 19:19:37

上传图片到阿里云OSS的步骤的相关文章

上传图片到阿里云OSS和获取上传图片的外网url的步骤

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

简单上传图片到阿里云OSS

OSS主要为用户提供数据存储服务,用户可以通过以下操作来处理OSS上的数据: 1.创建.查看.罗列.删除 Bucket: 2.修改.获取Bucket的访问权限: 3.上传.查看.罗列.删除Object/Object Group: 4.访问时支持If-Modified-Since和If-Match等HTTP参数.特点具体如下: 1.易用性:简单易用,便于管理,深度集成数据处理服务: 2.高可靠:多重冗余备份,服务设计可用性不低于99.99%: 3.强安全:多层次安全防护,支持跨区域复制.异地容灾机

Java中使用RestFul接口上传图片到阿里云OSS服务器

1.接口方法 import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation

上传图片到阿里云oss

阿里云地址 登录阿里云管理控制台,创建对象存储oss private static final String endpoint = "http://oss-cn-shanghai.aliyuncs.com"; private static final String accessKeyId = PropKit.get("accessKeyId"); private static final String accessKeySecret = PropKit.get(&q

vue中上传图片至阿里云oss

1.开通阿里云的oss服务这些这里就不多做介绍了 2.登入阿里云的后台管理系统创建一个Bucket 3.在后台管理系统中进入访问控制 4.点击用户管理->新建用户->填写相关信息,就生成了下图3 5.点击生成用户右侧的授权,添加如图的授权策略 6.点击角色管理->新建角色,然后创建了一个如下图的H5ROULE角色 7.点击右侧授权,并选择如下图的授权策略 8.在vue组件中使用 <template> <div class="upload"> &

PHP上传文件到阿里云OSS,nginx代理访问

1. 阿里云OSS创建存储空间Bucket(读写权限为:公共读) 2. 拿到相关配置 accessKeyId:********* accessKeySecret:********* endpoint:******** bucket:******** 3.创建 oss.php 上传类 (基于thinkPHP5) <?php namespace app\controller; use OSS\OssClient; class Oss { private static $_instance; priv

项目总结56:阿里云OSS上传的图片被自动旋转问题解决

问题:上传图片到阿里云OSS,再再HTML标签使用OSS图片路径,展示的图片被自动旋转了:但是将图片图片路径直接浏览器打开,是原始没有旋转过的: 解决方案: 阿里云文档已经说明了解决方案,链接:https://help.aliyun.com/document_detail/44691.html?spm=a2c4g.11186623.6.1160.1c5d149dByJ2yu 原因是某些手机拍摄出来的照片可能带有旋转参数(存放在照片exif信息里面),img处理图片是会识别这个旋转参数 即在URL

The difference between the request time and the current time is too large.阿里云oss上传图片报错

The difference between the request time and the current time is too large. 阿里云oss上传图片的时候报错如上, 解决办法,把系统时间自动同步成对应的时区的时间.

laravel下使用阿里云oss上传图片

对小公司而言,使用阿里云oss比直接买硬盘要划算的多,不管从存储性价比上还是从网速负载上.最近因为公司的项目有比较大的图片存储访问需求,所以决定使用阿里云的oss. 在研究了一下以后,摆着不自己造轮子的原则,决定使用AliyunOss,国人laravel高手JohnLui封装的一个阿里云oss的操作库. AliyunOSS 是阿里云 OSS 官方 SDK 的 Composer 封装,支持任何 PHP 项目,包括 Laravel.Symfony.TinyLara 等等.Github 地址:http