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

<form action="/bcis/api/headImgUpload.json" method="post" enctype="multipart/form-data">

    <input type="file" name="file">

    <input type="submit" value="提交">

</form>

2.controller:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

@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);//此处是调用上传服务接口,4是需要更新的userId 测试数据。

     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;注进来

1

2

3

4

5

6

7

8

9

10

@Override

  public String updateHead(MultipartFile file, long userId) throws IOException{

    if (file == null || file.getSize() <= 0) {

      throw new ImgException("头像不能为空");

    }

    String name = ossClient.uploadImg2Oss(file);

    String imgUrl = ossClient.getImgUrl(name);

    userDao.updateHead(userId, imgUrl);//只是本地上传使用的

    return imgUrl;

  }

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

import java.io.*;

import java.net.URL;

import java.util.Date;

import java.util.Random;

import com.fndsoft.bcis.exception.ImgException;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import com.aliyun.oss.OSSClient;

import com.aliyun.oss.model.ObjectMetadata;

import com.aliyun.oss.model.PutObjectResult;

import org.springframework.util.StringUtils;

import org.springframework.web.multipart.MultipartFile;

/**

 * 阿里云 OSS文件类

 *

 * @author YuanDuDu

 */

public class OSSClientUtil {

  Log log = LogFactory.getLog(OSSClientUtil.class);

  // endpoint以杭州为例,其它region请按实际情况填写

  private String endpoint = "您的endpoint";

  // accessKey

  private String accessKeyId = "您的accessKeyId";

  private String accessKeySecret = "您的accessKeySecret";

  //空间

  private String bucketName = "bcis";

  //文件存储目录

  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();

  }

  /**

   * 上传图片

   *

   * @param url

   */

  public void uploadImg2Oss(String url) {

    File fileOnServer = new File(url);

    FileInputStream fin;

    try {

      fin = new FileInputStream(fileOnServer);

      String[] split = url.split("/");

      this.uploadFile2OSS(fin, split[split.length - 1]);

    catch (FileNotFoundException e) {

      throw new ImgException("图片上传失败");

    }

  }

  public String uploadImg2Oss(MultipartFile file) {

    if (file.getSize() > 1024 1024) {

      throw new ImgException("上传图片大小不能超过1M!");

    }

    String originalFilename = file.getOriginalFilename();

    String substring = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();

    Random random = new Random();

    String name = random.nextInt(10000) + System.currentTimeMillis() + substring;

    try {

      InputStream inputStream = file.getInputStream();

      this.uploadFile2OSS(inputStream, name);

      return name;

    catch (Exception e) {

      throw new ImgException("图片上传失败");

    }

  }

  /**

   * 获得图片路径

   *

   * @param fileUrl

   * @return

   */

  public String getImgUrl(String fileUrl) {

    if (!StringUtils.isEmpty(fileUrl)) {

      String[] split = fileUrl.split("/");

      return this.getUrl(this.filedir + split[split.length - 1]);

    }

    return null;

  }

  /**

   * 上传到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 {

        if (instream != null) {

          instream.close();

        }

      catch (IOException e) {

        e.printStackTrace();

      }

    }

    return ret;

  }

  /**

   * 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";

  }

  /**

   * 获得url链接

   *

   * @param key

   * @return

   */

  public String getUrl(String key) {

    // 设置URL过期时间为10年  3600l* 1000*24*365*10

    Date expiration = new Date(new Date().getTime() + 3600l * 1000 24 365 10);

    // 生成URL

    URL url = ossClient.generatePresignedUrl(bucketName, key, expiration);

    if (url != null) {

      return url.toString();

    }

    return null;

  }

}

  

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

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

原文地址:https://www.cnblogs.com/xiangzideheiniu/p/11984063.html

时间: 2024-07-28 14:55:14

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

简单上传图片到阿里云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的步骤

啥都不说  直接上代码 1.html: <form action="/bcis/api/headImgUpload.json" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="提交&quo

vue中上传图片至阿里云oss

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

上传图片到阿里云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

阿里云Centos下安装nginx之后外网无法访问

centos 7.4 nginx1-14.0编译安装 curl 127.0.0.1 可以请求到 index.html curl local 可以请求到 index.html http://ip/ 无法访问 进入阿里云管理 ECS 实例,进入该实例安全组规则,默认没有 80 访问.添加安全组规则,将 80 端口设置为入站方向,暂时向所有 ip 开放(开发时),再次尝试通过 原文地址:https://www.cnblogs.com/cinlap/p/9075608.html

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上传图片的时候报错如上, 解决办法,把系统时间自动同步成对应的时区的时间.