使用阿里云OSS实现图片上传案例

28 篇文章 2 订阅
订阅专栏


前言

在正式的开发环境中,类似图片的静态资源一般不会存放在项目部署的服务器端,因为这样会占用大量的资源。所以我们一般使用第三方的云存储服务来实现静态资源的存取。本篇来记录使用阿里云OSS实现图片上传的案例。


一、OSS是什么?

阿里云OSS是一款,由阿里巴巴提供的云存储解决方案。云存储的优势在于,不用消耗本地服务器资源,高效,海量,低成本,高可靠,使用起来非常方便。

二、使用步骤

1.开通OSS服务

首先我们需要登陆阿里云官方网站,去登陆,没有帐号注册一个即可。然后需要进行余额充值,因为OSS服务是付费产品。
登陆完成,找到对象存储OSS服务进行开通
在这里插入图片描述

2.创建bucket

bucket就是我们需要存储文件的容器
在这里插入图片描述
在这里插入图片描述

3.创建子账户

帐号是我们访问OSS的凭证,推荐创建子账号进行资源访问
在这里插入图片描述
在这里插入图片描述
点击创建用户
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

我们需要为子账户添加权限,让其可以访问OSS
在这里插入图片描述
在这里插入图片描述

4.查看帮助文档,编写后端代码

我们找到帮助文档
在这里插入图片描述
进入帮助文档,找到SDK示例
在这里插入图片描述
导入maven依赖
在这里插入图片描述

选择java版本,简单上传
在这里插入图片描述
选择,上传文件流
在这里插入图片描述
将代码复制,在IDEA新建一个工具类,粘贴,需要注意的是,要将id和密钥换成自己的

package com.lzl.util;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

/**
 * @date 2022/10/11
 * @desc
 */
public class OssUtil {

    public static String uploadFile(InputStream inputStream, String filename) {

        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "";
        String accessKeySecret = "";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "";
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        String objectName = "image/";
        // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
        // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
        //String filePath = "E:\\2212\\pic\\girl.jpg";

        objectName = objectName+System.currentTimeMillis()+filename.substring(filename.lastIndexOf("."));

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        try {
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName,objectName, inputStream);
            // 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);

            // 上传文件。
            ossClient.putObject(putObjectRequest);

            //得到上传之后的文件地址
            //https://bucketname.endpoint/objectnane  https://upload-demo-liu.oss-cn-hangzhou.aliyuncs.com
            String fileUrl = "自己的路径"+objectName;

            System.out.println("上传之后的文件路径"+ fileUrl);

            return fileUrl;

        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }

        return "上传失败";
    }

}

controller代码:

/**
     * @param file
     * @return 文件路径
     * @throws IOException
     */
    @PostMapping("/upload")
    @ResponseBody
    public ResultLayUi<String> uploadPic(MultipartFile file) throws IOException {
        //得到文件的名字
        String originalFilename = file.getOriginalFilename();
        String fileUrl = OssUtil.uploadFile(file.getInputStream(), originalFilename);
        // 上传成功之后的文件地址 写给前端
        ResultLayUi<String> resultLayUi = new ResultLayUi<>();
        resultLayUi.setCode(0);
        resultLayUi.setT(fileUrl);
        return resultLayUi;
    }

5.layui前端

此处使用layui作为前端的上传页面,需要引入Layui环境

页面结构:

<div class="layui-form-item">
        <label class="layui-form-label">图片名字:</label>
        <div class="layui-input-block">
          <input type="hidden" name="path" value="" id="path" />
          <input type="text" name="pname" lay-verify="required" class="layui-input" style="width:200px;" />
        </div>
      </div>

      <div class="layui-form-item">
        <label class="layui-form-label"></label>
        <div class="layui-input-block">
           <!--图片上传div-->
            <div class="layui-upload">
              <button type="button" class="layui-btn" id="test1">上传图片</button>
              <div class="layui-upload-list">
                <img class="layui-upload-img" id="demo1">
                <p id="demoText"></p>
              </div>
              <div style="width: 95px;">
                <div class="layui-progress layui-progress-big" lay-showpercent="yes" lay-filter="demo">
                  <div class="layui-progress-bar" lay-percent=""></div>
                </div>
              </div>
            </div>
        </div>
      </div>

js处理

 //常规使用 - 普通图片上传
      var uploadInst = upload.render({
        elem: '#test1'
        , url: 'http://localhost:8080/picture/upload' //此处用的是第三方的 http 请求演示,实际使用时改成您自己的上传接口即可。
        , before: function (obj) {
          //预读本地文件示例,不支持ie8
          obj.preview(function (index, file, result) {
            $('#demo1').attr('src', result); //图片链接(base64)
          });

          element.progress('demo', '0%'); //进度条复位
          layer.msg('上传中', { icon: 16, time: 0 });
        }
        , done: function (res) {
          //如果上传失败
          if (res.code > 0) {
            return layer.msg('上传失败');
          }else{
          //上传成功的一些操作
          $("#path").val(res.t);
          }
          //……
          $('#demoText').html(''); //置空上传失败的状态
        }
        , error: function () {
          //演示失败状态,并实现重传
          var demoText = $('#demoText');
          demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
          demoText.find('.demo-reload').on('click', function () {
            uploadInst.upload();
          });
        }
        //进度条
        , progress: function (n, elem, e) {
          element.progress('demo', n + '%'); //可配合 layui 进度条元素使用
          if (n == 100) {
            layer.msg('上传完毕', { icon: 1 });
          }
        }
      });

测试如下:
在这里插入图片描述
成功!


总结

使用OSS对象存储服务来实现文件的上传是必须要掌握的。下篇再见

基于阿里云OSS图片上传功能
kersixy的博客
01-11 674
阿里云对象存储服务(Object Storage Service,简称OSS)为您提供基于网络的数据存取服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种非结构化数据文件。
前端vue直传oss图片
Lfl202116888的博客
05-30 998
前端直传oss
文件上传之阿里云oss
最新发布
weixin_69039908的博客
05-03 311
一、使用阿里云oss存储文件1.什么是阿里云oss?OSS 为 Object Storage Service,即对象存储服务。是阿里云提供的海量、安全、低成本、高可靠的云存储服务。OSS 具有与平台无关的 RESTful API 接口,可以在任意应用、任意时间、任意地点 存储与访问 任何类型的数据。简单地理解:OSS 基于网络提供数据存储服务,通过网络可以随时存储、获取 文本、图片、音频、视频等 非结构化数据。
阿里云OSS服务协议源码-易语言
06-12
源码有完整的Bucket 和Object 操作,切有详细的demo。 通过协yi上传和下载文件是全免费 的,只有通过外部下载连接才算钱!
使用阿里云实现上传图片功能
weixin_54256249的博客
08-17 910
使用阿里云上传图片
OSS存储引擎如何使用以及如何添加图片【建议收藏】
小魏快起床的博客
01-23 1513
Aliyun OSS对象存储,可以用来做文件服务器,存放一些文件,图片等资源,那么我们使用OSS,需要经历以下步骤:这里就从如何开通OSS服务开始进行,到如何上传一个资源文件到OSS结束。
在uniapp小程序中使用阿里云OSS上传图片(有部分视频教程)
NSX-Truth
07-17 8063
1. 前言 这是本人毕业设计中其中一个功能点,就是用户在微信小程序(使用uniapp框架)中的社区模块中可以发布个人动态,其中动态可包含图片,那么我们发布的图片在实际开发中不会直接放到项目中吧,因为那样会是整个项目体积变大,所以我想利用阿里云OSS把发布成功的图片自动上传到它那里,同时数据库会存放上传成功的图片路径,然后在前端中调用后端接口显示出来。 2. 实现效果(最后放个演示视频吧) 3. 实现思路 ...
php版阿里云OSS图片上传类详解
10-21
PHP版阿里云OSS(Object Storage Service)图片上传类是用于在阿里云存储服务上进行文件操作的一个工具,特别是针对图片的上传、删除和获取。这个类提供了方便的方法来处理与OSS交互的各种任务,包括上传、下载、...
Thinkphp整合阿里云OSS图片上传实例代码
10-17
kphp3.2整合阿里云OSS图片上传实例,图片上传OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了,本文通过实例代码给大家介绍,需要的朋友一起看看吧
Vue.js上传图片阿里云OSS存储的方法示例
10-17
Vue.js与阿里云OSS集成实现图片上传 在Web开发中,有时我们需要将用户上传的图片存储到云端,以方便后续的访问和管理。阿里云的对象存储服务(OSS)提供了一个高效、安全的解决方案。本文将详细介绍如何在Vue.js...
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
12-18
之前从没接触过Yii,借助的各方资源来做的这个整合阿里云OSS的SDK上传图片实例,如果有不正之处请指出! 前面参照了weinirumo 的介绍,大家可以自行去查看。 好了,下面开始进入主题: 准备工作:需要使用composer...
js代码实现图片上传阿里云OSS
11-29
基于plupload封装 支持html5,flash,silverlight,html4 等协议上传 可以运行在PC浏览器,手机浏览器,微信 可以选择多文件上传 显示上传进度条
简单的上传图片阿里云
05-23
写的简单的上传文件到阿里云的代码,里面有需要的jar包
OSS图片上传工具
04-17
OSS图片上传工具,用于oss上传图片测试用,
oss上传图片
爪哇人的博客
05-30 923
在公司中,上传图片和视屏可以说是很常见的操作了。通常会将图片和视屏保存到阿里云上进行存储。所以需要阿里云的4个参数(站点、acess_key_id、acess_key_secret、bucket_name)。 //上传的固定值 //站点 private static final String END_POINT = "http://oss-cn-hangzhou.aliyuncs.com"; //获取acess_key_id private stati..
前后端分离整合阿里云OSS图片上传功能
sunao1106的博客
08-09 1334
用户访问服务器上传图片的操作由服务器完成。 缺点 - 大量请求访问服务器会造成很大的压力; - 在微服务中,必须要有一个统一固定的地方来存放文件资源,否则在多模块的微服务中,不能保证文件的正确性、一致性。......
阿里云oss上传图片
zm_miner的博客
05-16 629
安装依赖 npm install --save axios js-base64 点击修改按钮 弹框选择图片或者文件 代码 index.js <AliyunOSSUpload onGetFileUrl={onGetFileUrl} /> AliyunOSSUpload.js import React from 'react'; import { Form, Upload, message, Button } from 'antd'; import { getOSSClientCredit,
阿里云图片上传
qq_42632428的博客
04-18 195
阿里云图片上传 依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency>
Java使用阿里云OSS对象存储上传图片
热门推荐
Sang
03-27 3万+
示例说明   该案例OSS Java SDK的示例程序,您可以修改endpoint、accessKeyId、accessKeySecret、bucketName后直接运行。 本示例中的并不包括OSS Java SDK的所有功能,详细功能及使用方法,请参看“SDK手册 > Java-SDK”, 链接地址是:https://help.aliyun.com/document_detail/os
vue调用阿里云oss图片上传多张
07-28
在Vue中调用阿里云OSS进行多张图片上传,可以按照以下步骤进行操作: 1. 在你的Vue项目中安装ali-oss和element-ui(可选)依赖: ``` npm install ali-oss element-ui ``` 2. 在你的Vue组件中引入所需的库和样式:...

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 使用EasyExcel实现Excel的导入导出 10972
  • MVC三层架构详解 8563
  • 使用阿里云OSS实现图片上传案例 6994
  • IDEA搭建JavaWeb项目,JDBC和Servlet-JSP技术实现注册功能 5072
  • Java学习之遍历的三种方法 5010

分类专栏

  • 业务场景 8篇
  • file 1篇
  • 前端随笔 1篇
  • mybatis-plus 2篇
  • Redis 4篇
  • 分布式架构 8篇
  • SpringCloud 8篇
  • springboot 11篇
  • 运维 1篇
  • JavaWeb 28篇
  • EasyExcel 1篇
  • springmvc 2篇
  • spring 6篇
  • 面试 1篇
  • MySQL 4篇
  • 线程 2篇
  • I/O流 2篇
  • 集合 4篇

最新评论

  • 使用SpringBoot+JWT+MybatisPlus实现简单的登陆状态验证

    小小李程序员: 这个是简单登陆,不能防止别人登陆你的账户,多个人可以用一个账号访问资源,加上redis会更安全,哈哈哈

  • 使用EasyExcel实现Excel的导入导出

    阿J~: 大佬出品,必属精品~

  • 使用EasyExcel实现Excel的导入导出

    可釦--稀饭: 异常怎么统一捕获

  • SpringBoot整合Quartz以及异步调用

    weixin_41870654: 这个用到是Schedule啊

  • 使用阿里云OSS实现图片上传案例

    铸键为犁: 是文件上传后,在oss显示的文件名,采用拼接的方式,把源文件截取,后缀,同时使用时间戳作为新的文件名,防止重复,也可以在文件名加/,oss会自动创建一个文件夹

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • MultipartFile转换file
  • 使用腾讯逆地理位置编码获取地理位置信息
  • OSS大文件分片上传
2024年1篇
2023年39篇
2022年44篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

PHP网站源码龙岗百度关键词包年推广福田关键词排名西乡网站优化按天扣费民治企业网站设计横岗seo沙井高端网站设计南联seo盐田百度关键词包年推广福永优秀网站设计南山网站改版横岗网站设计爱联网络推广光明网站定制光明品牌网站设计东莞网站优化按天计费大浪关键词按天计费布吉网站优化软件民治网站优化软件坪地SEO按天收费西乡百度竞价光明企业网站设计观澜seo排名盐田网站优化推广大运百度爱采购荷坳百搜标王同乐网站优化排名南澳网站优化按天收费盐田营销网站石岩阿里店铺运营平湖标王歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化