精华内容
下载资源
问答
  • 基于java语言实现文件的本地上传oss普通上传,和大文件的分段上传,请手写的,可以使用,可以上传图片,视频压缩包等多种格式文件
  • 阿里云OSS上传文件设置请求

    千次阅读 2021-02-05 20:11:48
    之前写过一篇发送文件消息的,原生input上传文件(聊天发送文件消息),那么这次的需求就是更改上传地址,使用阿里云OSS上传。 那么,这次选择使用elementUI的upload插件,样式各位大哥根据自己的需求实现吧。 要...

    之前写过一篇发送文件消息的,原生input上传文件(聊天发送文件消息),这次的需求就是更改上传地址,使用阿里云OSS上传。

    如果想了解阿里云对象存储OSS是如何使用的,请看阿里云存储对象OSS使用讲解一:OSS的购买和配置

    那么,这次选择使用elementUI的upload插件,样式各位大哥根据自己的需求实现吧,就不做展示了。

    要使用OSS,首先需要安装,引入,创建,这里就不详解了,推荐查看:阿里oss前端上传使用

    这位大哥是基于promise来创建OSS,也可以选择不使用Promise:

    data(){
        return {
          ossConfig: { // ossConfig 的内容根据自己项目自己添加。
            region: '',
            // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
            accessKeyId: '',
            accessKeySecret: '',
            bucket: '',
            ossDomain: ""
          },
          client: {},
          tempCheckpoint: "",
          fileList: [],
          processPercent: {},
          extImag:{
            ".zip":"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1602681161979&di=78bc24f85f33acd6c61c04047624a331&imgtype=0&src=http%3A%2F%2Fbpic.588ku.com%2Felement_origin_min_pic%2F00%2F22%2F11%2F7256ce730033d96.jpg",
            ".rar":"",
          }
        }
      },
      created() {
        let client = new OSS(this.ossConfig);
        this.client = client
      },

    文件上传:

    methods:{
        async  multipartUpload (fileObj,ossSavePath,fileName,ext){
          let uid = fileName
          this.$set(this.processPercent,uid,0)
          try {
            let self = this;
            let result = await this.client.multipartUpload(ossSavePath, fileObj
            // 以下参数皆为可选参数,可不传
            ,{
              progress: function (p, checkpoint) { // 如果需要显示上传进度则需要使用progress函数
                self.$set(self.processPercent,uid,Math.floor(p*100)) // 在页面中获取processPercent.uid即为上传进度
                // 断点记录点。浏览器重启后无法直接继续上传,您需要手动触发上传操作。
                self.tempCheckpoint = checkpoint;// 记录上传断点
              },
              meta: { year: 2020, people: 'test' },
              mime: fileObj.type,
              headers: {
                "Content-Disposition": `attachment; filename=${encodeURIComponent(fileObj.name)}`,
                "Cache-Control": "public, no-cache"
              }
            })
            let data = {
              url:this.ossConfig.ossDomain+result.name,
              fileName:fileName,
              ext:ext
            }
            return data;
          } catch(e){
            console.log(e);
          }
        },
        uuid(){ // 类似于获取随机字符段
          var s = [];
          var hexDigits = "0123456789abcdef";
          for (var i = 0; i < 36; i++) {
            s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
          }
          s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
          s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
          s[8] = s[13] = s[18] = s[23] = "-";
          var uuid = s.join("");
          return uuid;
        },
        uploadFile(data){
          let uid = this.uuid()
          let fileObj = data.file;
          let fileName = fileObj.name
          let pos = fileName.lastIndexOf('.')
          let lastName = fileName.substring(pos, fileName.length)
          let ossSavePath = this.OssSaveDir+uid+lastName;
          let accept = this.accept.split(",");
          let isAllow = accept.indexOf(lastName)
          if(isAllow==-1){
            this.$message.error(`${this.acceptTips}`);
            return false
          }
          const isOverLimit500M = (fileObj.size /1024/1024/100) <= 5
          if (!isOverLimit500M) {
            this.$message.error('上传文件不得大于500MB!')
            return false
          }
          let result = this.multipartUpload(fileObj,ossSavePath,fileObj.uid,lastName)
          result.then((data)=>{
            debugger
            console.log(data)
            let item = {
              "name":fileObj.name,
              "url":data.url,
              "fileName":data.fileName,
              "ext":data.ext,
              "uid":fileObj.uid
            }
            this.fileList.push(item)
            this.$emit('fileList', this.fileList);
          })
        },
      }

    本篇重点:请求头

    如果不传 headers 参数,可能会出现两种情况:

    • 返回的文件链接为查看,而非下载链接【文件类型(txt/doc等)可能会出现,而非图片】
    • 点击下载文件,保存弹框中显示文件名称不正确

    针对这两个问题,重点就是在于设置请求头信息:Content-Disposition。

    Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件,Content-Disposition 属性是作为对下载文件的一个标识字段

    通俗来讲就是Content-disposition属性决定你在浏览器窗口打开上传成功后返回的文件链接时,浏览器如何响应,是直接在页面显示文件内容,还是下载文件。

    Content-Disposition属性有两个值

    • inline:在浏览器显示打开文件(显示内容)
    • attachment:弹出文件下载保存框(下载文件)

    而如果直接设置属性值为attachment,下载文件可能显示的文件名不正确,这个时候就需要Content-disposition属性控制用户请求所得的内容存为一个文件的时候提供一个默认的文件名,那么就需要传递文件名,综上所述,重点如下:

    // 设置请求头
    headers: {
                "Content-Disposition": `attachment; filename=${encodeURIComponent(fileObj.name)}`
              }

    如果感觉我讲的不清楚的,推荐两篇文章:

    Content-Disposition 响应头。 

    header中Content-Disposition的作用与使用方法

    而为何使用 encodeURIComponent() 方法,就不做详述了,原因如下:

    Request请求:Failed to execute 'setRequestHeader' on 'XMLHttpRequest': String contains non ISO-8859-1 code point.问题解决

    那么,最重要的还是文档,上文档:阿里云 ali-oss 文档

    本篇完~-~

    另附一篇:这个文件下载问题难住了我至少三位同事

    展开全文
  • 实现文件上传功能,本地上传,需设置本地保存的地址,oss上传需设置自己的oss参数,oss图片可实现添加水印
  • oss上传资源

    2017-09-19 11:50:29
    阿里oss服务器 - 客户端上传 - 入口页面静态资源类 阿里oss服务器 - 客户端上传 - 入口页面静态资源类 阿里oss服务器 - 客户端上传 - 入口页面静态资源类
  • Oss 上传代码封装

    2018-09-12 16:43:36
    Oss 简单的上传代码封装,目前很多系统都在用这个封装的oss上传
  • mac版本oss上传脚本

    2019-01-08 17:57:02
    mac版本oss上传脚本,其他版本请自行去oss官网查找下载
  • OSS上传文件工具类

    2018-05-26 09:33:48
    OSS上传文件工具类 可上传任何文件 通过自定后缀名实现
  • android 集成OSS 上传图片
  • 一、阿里云oss存储服务 为了解决海量数据存储与弹性扩容,项目中我们采用云存储的解决方案- 阿里云OSS。 1、开通 “对象存储OSS”服务 ...(4)找到阿里云oss ...3、Java代码操作阿里云oss上传文件 1、准备工作:创建操

    一、阿里云oss存储服务

    为了解决海量数据存储与弹性扩容,项目中我们采用云存储的解决方案- 阿里云OSS。

    1、开通 “对象存储OSS”服务

    (1)打开阿里云网站 https://www.aliyun.com/
    (2)注册阿里云账户,最好使用支付宝,需要实名认证
    (3)使用注册的用户登录阿里云里面
    (4)找到阿里云oss
    在这里插入图片描述
    (5)开通oss
    在这里插入图片描述

    2、进入oss管理控制台

    (1)使用oss,首先创建bucket
    在这里插入图片描述
    创建说明
    在这里插入图片描述
    (2)控制台上传图片
    在这里插入图片描述

    3、Java代码操作阿里云oss上传文件

    1、准备工作:创建操作阿里云oss许可证(阿里云颁发id和秘钥)

    在这里插入图片描述
    在这里插入图片描述
    2、文档位置

    在这里插入图片描述
    快速入门文档:https://help.aliyun.com/document_detail/32011.html?spm=a2c4g.11186623.6.905.23866328891B4P

    3、具体使用

    (1)创建Mavaen项目

    (2)POM

    <dependencies>
       <!--aliyunOSS-->
       <dependency>
           <groupId>com.aliyun.oss</groupId>
           <artifactId>aliyun-sdk-oss</artifactId>
           <version>2.8.3</version>
       </dependency>
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.12</version>
       </dependency>
    </dependencies>
    

    (3)找到编码时需要用到的常量值

    • endpoint
    • bucketName
    • accessKeyId
    • accessKeySecret

    (4)测试创建Bucket的连接

    public class OSSTest {
    	// Endpoint以杭州为例,其它Region请按实际情况填写。
    	String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    	// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
    	String accessKeyId = "<yourAccessKeyId>";
    	String accessKeySecret = "<yourAccessKeySecret>";
    	String bucketName = "<yourBucketName>";
    	
    	// 创建OSSClient实例。
    	OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    	
    	// 创建存储空间。
    	ossClient.createBucket(bucketName);
    	
    	// 关闭OSSClient。
    	ossClient.shutdown();     
    }	
    

    (5)判断存储空间是否存在

    @Test
    public void testExist() {
        // 创建OSSClient实例。
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
        boolean exists = ossClient.doesBucketExist(bucketName);
        System.out.println(exists);
        // 关闭OSSClient。
        ossClient.shutdown();
    }
    

    (6)设置存储空间的访问权限

    @Test
    public void testAccessControl() {
        // 创建OSSClient实例。
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    
        // 设置存储空间的访问权限为:公共读。
        ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
        // 关闭OSSClient。
        ossClient.shutdown();
    }
    

    在这里插入图片描述

    二、后端集成OSS

    1、在service模块下创建子模块service_oss

    2、配置pom.xml

    service-oss上级模块service已经引入service的公共依赖,所以service-oss模块只需引入阿里云oss相关依赖即可,
    service父模块已经引入了service-base模块,所以Swagger相关默认已经引入

    <dependencies>
        <!-- 阿里云oss依赖 -->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
        </dependency>
    
        <!-- 日期工具栏依赖 -->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
        </dependency>
    </dependencies>
    

    3、配置application.properties

    #服务端口
    server.port=8002
    #服务名
    spring.application.name=service-oss
    
    #环境设置:dev、test、prod
    
    spring.profiles.active=dev
    
    #阿里云 OSS
    #不同的服务器,地址不同
    aliyun.oss.file.endpoint=your endpoint
    aliyun.oss.file.keyid=your accessKeyId
    aliyun.oss.file.keysecret=your accessKeySecret
    #bucket可以在控制台创建,也可以使用java代码创建
    aliyun.oss.file.bucketname=guli-file
    

    4、主启动类

    @SpringBootApplication
    @ComponentScan(basePackages = {"com.kuang"})
    public class OssApplication {
        public static void main(String[] args) {
            SpringApplication.run(OssApplication.class, args);
        }
    }
    

    5、启动主启动类,测试项目报错

    在这里插入图片描述
    启动时候,找数据库配置,但是现在模块因为不需要操作数据库,只是做了上传到oss功能,没有配置数据库。

    解决方式

    (1)添加上数据库配置
    (2)在启动类添加属性,默认不去加载数据库配置【推荐使用】

    @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
    

    三、实现上传功能

    1、创建常用类,读取配置文件内容

    @Component
    public class ConstantPropertiesUtils implements InitializingBean {
        
        @Value("${aliyun.oss.file.endpoint}")
        private String endpoint;
        
        @Value("${aliyun.oss.file.keyid}")
        private String keyId;
        
        @Value("${aliyun.oss.file.keysecret}")
        private String keySecret;
        
        @Value("${aliyun.oss.file.bucketname}")
        private String bucketName;
        
        public static String END_POINT;
        public static String ACCESS_KEY_ID;
        public static String ACCESS_KEY_SECRET;
        public static String BUCKET_NAME;
        
        public void afterPropertiesSet() throws Exception {
            END_POINT = endpoint;
            ACCESS_KEY_ID = keyId;
            ACCESS_KEY_SECRET = keySecret;
            BUCKET_NAME = bucketName;
        }
    }
    

    2、文件上传

    创建Service接口:OssService.java

    public interface OssService {
        //上传头像到oss中
        String uploadFileAvator(MultipartFile file);
    }
    

    实现:OssServiceImpl.java

    参考SDK中的:Java ->上传文件 -> 简单上传 -> 流式上传 -> 上传文件流

    package com.kuang.oss.service.impl;
    
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.kuang.oss.service.OssService;
    import com.kuang.oss.utils.ConstantPropertiesUtils;
    import org.joda.time.DateTime;
    import org.springframework.stereotype.Service;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.InputStream;
    import java.util.UUID;
    
    @Service
    public class OssServiceImpl implements OssService {
    
        //头像上传到oss
        @Override
        public String uploadFileAvator(MultipartFile file) {
    
            // 工具类获取值
            String endpoint = ConstantPropertiesUtils.END_POINT;
            String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
            String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
            String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
    
            try {
                // 创建OSS实例
                OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
                // 上传文件流。
                InputStream inputStream = file.getInputStream();
                //获取文件名称
                String fileName  = file.getOriginalFilename();
    
                //在文件名称里面添加随机唯一的值
                String uuid = UUID.randomUUID().toString().replaceAll("-","");
                fileName = uuid + fileName;
    
                //把文件按日期进行分类
                // 2020/10/08/1.jpg
                //获取当前日期
                String datePath = new DateTime().toString("yyyy/MM/dd");
                //拼接
                fileName = datePath + "/" + fileName;
    
                //调用oss方法实现上传
                //第一个参数  Bucket名称
                //第二个参数  上传到oss文件路径和文件名称  aa/bb/1.jpg
                //第三个参数  上传文件输入流
                ossClient.putObject(bucketName, fileName, inputStream);
    
                // 关闭OSSClient。
                ossClient.shutdown();
    
                //把上传之后文件路径返回
                //需要把上传到阿里云oss路径手动拼接出来
                //   https://guli-edu-20201.oss-cn-beijing.aliyuncs.com/1.jpg
                String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
                return url;
            }catch (Exception e){
                e.printStackTrace();
                return null;
            }
        }
    }
    

    3、控制层

    创建controller:OssController.java

    package com.kuang.oss.controller;
    
    import com.kuang.commonutils.R;
    import com.kuang.oss.service.OssService;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import io.swagger.annotations.ApiParam;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.multipart.MultipartFile;
    
    @Api(description="阿里云文件管理")
    @RestController
    @RequestMapping("/eduoss/fileoss")
    @CrossOrigin
    public class OssController {
    
        @Autowired
        private OssService ossService;
    
        @ApiOperation(value = "文件上传")
        @PostMapping("/upload")
        public R uploadOssFile(@ApiParam(name = "file", value = "文件", required = true)
                                @RequestParam("file") MultipartFile file){
            //返回上传到oss的路径
            String url = ossService.uploadFileAvator(file);
            return R.ok().data("url",url);
        }
    
    }
    

    4、重启oss服务,Swagger中测试文件上传

    http://localhost:8002/swagger-ui.html

    四、Nginx 反向代理服务器

    • 请求转发
    • 负载均衡
    • 动静分离

    在这里插入图片描述

    1、安装window版的nginx

    下载官网:http://nginx.org/en/download.html

    将nginx-1.12.0.zip解压到开发目录中
    如:D:\develop\nginx-1.12.2
    使用cmd启动nginx ,运行nginx.exe

    在这里插入图片描述
    系统会运行两个nginx进程。

    特点:使用cmd启动nginx,如果关闭cmd窗口,nginx不会停止的。

    需要使用nginx.exe -s stop 进行手动关闭,重启命令nginx -s reload

    2、配置nginx实现请求转发的功能

    1、找到nginx配置文件D:\develop\nginx-1.12.2\conf\nginx.conf

    2、在nginx.conf进行配置

    (1)修改nginx默认端口,把 80 修改 81
    在这里插入图片描述

    (2)配置nginx转发规则

    server {
            listen       9001;
            server_name  localhost;
    
    		location ~ /eduservice/ {
    			proxy_pass http://localhost:8001;
    		}
    		location ~ /eduuser/ {
    			proxy_pass http://localhost:8001;
    		}
    		location ~ /eduoss/ {
    			proxy_pass http://localhost:8002;
    		}
    		location ~ /eduvod/ {
    			proxy_pass http://localhost:8003;
    		}
    		location ~ /educms/ {
    			proxy_pass http://localhost:8004;
    		}
    		location ~ /ucenterservice/ {
    			proxy_pass http://localhost:8006;
    		}
    		location ~ /edumsm/ {
    			proxy_pass http://localhost:8005;
    		}
    		location ~ /orderservice/ {
    			proxy_pass http://localhost:8007;
    		}
    		location ~ /staservice/ {
    			proxy_pass http://localhost:8008;
    		}
    		location ~ /admin/ {
    			proxy_pass http://localhost:8009;
    		}
    		
        }
    

    3、修改前端请求地址

    (1)修改config/dev.env.js

    BASE_API: '"http://localhost:9001"',
    

    (2)重启前端程序

    修改配置文件后,需要手动重启前端程序

    在这里插入图片描述

    五、添加讲师实现头像前端整合

    1、在添加讲师页面,创建上传组件,实现上传。

    使用element-ui组件实现。到源代码里面找到组件,复制到前端项目/src/components里面

    在这里插入图片描述

    2、添加讲师页面使用这个复制上传组件

    src/views/edu/teacher/save.vue

    <!-- 讲师头像 -->
    <el-form-item label="讲师头像">
    
        <!-- 头衔缩略图 -->
        <pan-thumb :image="teacher.avatar"/>
        <!-- 文件上传按钮 -->
        <el-button type="primary" icon="el-icon-upload" @click="imagecropperShow=true">更换头像
        </el-button>
    
        <!--
    v-show:是否显示上传组件
    :key:类似于id,如果一个页面多个图片上传控件,可以做区分
    :url:后台上传的url地址
    @close:关闭上传组件
    @crop-upload-success:上传成功后的回调 
      <input type="file" name="file"/>
    -->
        <image-cropper
                      v-show="imagecropperShow"
                      :width="300"
                      :height="300"
                      :key="imagecropperKey"
                      :url="BASE_API+'/eduoss/fileoss'"
                      field="file"
                      @close="close"
                      @crop-upload-success="cropSuccess"/>
    </el-form-item>
    

    引入组件模块

    import ImageCropper from '@/components/ImageCropper'
    import PanThumb from '@/components/PanThumb'
    

    3、js脚本实现上传和图片回显

    export default {
      components: { ImageCropper, PanThumb },
      data() {
        return {
          //其它数据模型
          ......,
          
          //上传弹框组件是否显示
          imagecropperShow:false,
          imagecropperKey:0,//上传组件key值
          BASE_API:process.env.BASE_API,//获取dev.env.js里面地址
          saveBtnDisabled: false//保存按钮是否禁用
        }
      },
       //.......,
      methods:{
        //关闭上传弹框的方法
        close() {
          this.imagecropperShow = false
          //上传组件初始化
          this.imagecropperKey = this.imagecropperKey + 1
        },
        //上传成功方法
        cropSuccess(data) {
          this.imagecropperShow=false
          //上传之后接口返回图片地址
          this.teacher.avatar=data.url
          //上传组件初始化
          this.imagecropperKey = this.imagecropperKey + 1
        },
        //其他函数
    	......,
      }
    }
    

    4、设置默认头像

    config/dev.env.js中添加阿里云oss bucket地址

    OSS_PATH: '"https://guli-file.oss-cn-beijing.aliyuncs.com"'
    

    组件中初始化头像默认地址

    const defaultForm = {
      ......,
      avatar: process.env.OSS_PATH + '/avatar/default.jpg'
    }
    

    5、启动测试即可


    如果有收获!!! 希望老铁们来个三连,点赞、收藏、转发。
    创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客
    展开全文
  • 目录结构: application.yml ... name: service-oss profiles: active: dev aliyun: oss: file: endpoint: oss-cn-beijing.aliyuncs.com keyid: LTAI4G8q7nBEsUb1NxXC keysecret: 3FEJ5vh5EttqiiLdvi

    目录结构:
    在这里插入图片描述
    application.yml

    server:
      port: 8002
    spring:
      application:
        name: service-oss
      profiles:
        active: dev
    
    aliyun:
      oss:
        file:
          endpoint: oss-cn-beijing.aliyuncs.com
          keyid: LTAI4G8q7nBEsUb1NxXC
          keysecret: 3FEJ5vh5EttqiiLdviC1dVjuvU
          #bucket可以在控制台创建也可以在代码中创建
          bucketname: edu-guli-study
    

    ConstantPropertiesUtils:(用于注入配置文件中的阿里云配置信息)

    @Component //实现InitializingBean接口可以执行执行赋值后的一些逻辑(由于属性是private的)
    public class ConstantPropertiesUtils implements InitializingBean {
    
        @Value("${aliyun.oss.file.endpoint}")
        private String endpoint;
    
        @Value("${aliyun.oss.file.keyid}")
        private String keyId;
    
        @Value("${aliyun.oss.file.keysecret}")
        private String keySecret;
    
        @Value("${aliyun.oss.file.bucketname}")
        private String bucketName;
    
        /*定义公有静态常量*/
        public static String ENDPOINT;
        public static String KEYID;
        public static String KEYSECRET;
        public static String BUCKETNAME;
    
    
        @Override
        public void afterPropertiesSet() throws Exception {
            ENDPOINT = endpoint;
            KEYID = keyId;
            KEYSECRET = keySecret;
            BUCKETNAME = bucketName;
        }
    }
    

    OssApplication:

    @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
    @ComponentScan(basePackages = {"com.coderkun"}) //为了swagger扫描到该包下的Controller
    public class OssApplication {
        public static void main(String[] args) {
            SpringApplication.run(OssApplication.class,args);
        }
    }
    

    OSSController:

    @RestController
    @Api(description = "oss文件上传")
    @RequestMapping("/eduoss/fileoss")
    @CrossOrigin
    public class OssController {
    
        @Autowired
        private OssService ossService;
    
        //上传头像方法
        @PostMapping
        public R uploadOssFile(MultipartFile file){
            String url = ossService.uploadOssFileAvatar(file);
            return R.ok().data("url",url);
        }
    }
    

    OssService:

    public interface OssService {
        //上传头像到oss
        String uploadOssFileAvatar(MultipartFile file);
    }
    

    OssServiceImpl:

    @Service
    public class OssServiceImpl implements OssService {
        @Override
        public String uploadOssFileAvatar(MultipartFile file) {
            // Endpoint以杭州为例,其它Region请按实际情况填写。
            String endpoint = ConstantPropertiesUtils.ENDPOINT;
            // 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建。
            String accessKeyId = ConstantPropertiesUtils.KEYID;
            String accessKeySecret = ConstantPropertiesUtils.KEYSECRET;
            String bucketName = ConstantPropertiesUtils.BUCKETNAME;
    
    
            try {
                // 创建OSSClient实例。
                OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
                // 上传文件流。
                InputStream inputStream = file.getInputStream();
    
                //获取文件名称
                String fileName = file.getOriginalFilename();
                //1.由于文件名重复会覆盖,生成随机文件名
                String uuid = UUID.randomUUID().toString().replaceAll("-","");
                fileName = uuid + fileName;
                //2.把文件按照日期分类
                String datePath = new DateTime().toString("yyyy/MM/dd");
                fileName = datePath + "/" + fileName; //2020/6/4/dafdf.jpg
    
                //第二个参数:上传到oss的文件路径和文件名称  /aa/bb1.jpg
                ossClient.putObject(bucketName,fileName, inputStream);
    
                // 关闭OSSClient。
                ossClient.shutdown();
    
                //把上传之后oss返回的文件url返回()
                //url格式:https://edu-guli-study.oss-cn-beijing.aliyuncs.com/%25U%7EHW%2502P2OH6FXR%29%5B8%60T2A.png
                String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
                return url;
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }
    }
    

    欢迎关注公众号Java技术大本营,会不定期分享BAT面试资料等福利。

    在这里插入图片描述


    展开全文
  • 阿里oss上传demo

    2021-03-05 14:30:54
    OSS的demo
  • dubbo上传文件+oss上传文件服务
  • 阿里云OSS上传插件

    2013-05-19 12:20:28
    阿里云OSS上传插件阿里云OSS上传插件
  • 阿里云OSS上传thinkphp

    2017-08-08 14:44:14
    阿里云OSS上传
            **阿里云OSS上传thinkphp 初学者**
    

    1. 下载php-sdk 下载地址:https://github.com/aliyun/aliyun-oss-php-sdk
    2. 修改samples目录中的Config.php文件

    修改 OSS_ACCESS_ID, 您从OSS获得的AccessKeyId。
    修改 OSS_ACCESS_KEY, 您从OSS获得的AccessKeySecret。
    修改 OSS_ENDPOINT, 您选定的OSS数据中心访问域名,如 http://oss-cn-hangzhou.aliyuncs.com
    修改 OSS_TEST_BUCKET, 您要用来运行sample使用的bucket,sample程序会在这个bucket中创建一些文件。
    注意:不能用生产环境的bucket,以免污染用户数据
    3. 到samples目录中执行 php RunAll.php, 也可以单个运行某个Sample文件。
    4. 上传文件:
    实例化 ossClient=newOssClient( accessKeyId, accessKeySecret, endpoint);
    调用putObject( bucket, object, $content)方法;

        <?php
            $accessKeyId = "<您从OSS获得的AccessKeyId>";
            $accessKeySecret = "<您从OSS获得的AccessKeySecret>";
            $endpoint = "<您选定的OSS数据中心访问域名,例如http://oss-cn-hangzhou.aliyuncs.com>";
            $bucket= " <您使用的Bucket名字,注意命名规范>";
            $object = " <您使用的Object名字,注意命名规范>";
            $content = "Hi, OSS.";
            try {
                $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
                $ossClient->putObject($bucket, $object, $content);
            } catch (OssException $e) {
                print $e->getMessage();
            }
    

    5.删除文件:
    实例化 ossClient=newOssClient( accessKeyId, accessKeySecret, endpoint);
    object 参数为要删除对象;
    调用deleteObject( bucket, object)方法;

        <?php
        $accessKeyId = "<您从OSS获得的AccessKeyId>";
        $accessKeySecret = "<您从OSS获得的AccessKeySecret>";
        $endpoint = "<您选定的OSS数据中心访问域名,例如http://oss-cn-hangzhou.aliyuncs.com>";
        $bucket= " <您使用的Bucket名字,注意命名规范>";
        $object = " <您使用的Object名字,注意命名规范>";
        try {
            $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
            $ossClient->deleteObject($bucket, $object);
        } catch (OssException $e) {
            print $e->getMessage();
        }
    
    展开全文
  • Vue Element UI + OSS上传文件

    万次阅读 热门讨论 2018-08-06 23:08:04
      Element UI提供了upload上传组件,可以到官网查看upload组件的详细介绍;查看upload组件的上传源码upload/ajax,使用的XHR对象上传文件,在项目实践中,发现该...本文主要讲解的是OSS上传文件的前端,Browser....
  • 实现压缩,多张上传,进度汇总(如何... 看我博客oss 上传篇 有详细介绍 或者参照里面的说明) 解压。打开 》index.html 实现压缩,多张上传,进度汇总(如何使用? 看我博客oss 上传篇 有详细介绍 或者参照里面的说明)
  • 本篇文章主要介绍了Android Oss上传图片的使用示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • oss上传-java

    2019-01-10 18:35:36
    public class OSS { //url https://waterchat.oss-cn-beijing.aliyuncs.com/on public static final String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,...
  • 阿里云OSS上传文件

    千次阅读 2018-06-05 01:43:34
    Aliyun OSS 上传文件 本教程主要介绍在获取到aliyun oss的三个字段accessKeyId,accessKeySecret,roleArn的信息后,在android端配置token并上传TXT文件 重写 OSSFederationCredentialProvider 类 在官方文档中...
  • oss上传文件以及jar包

    2017-08-18 09:16:43
    使用oss技术上传文件
  • kindeditor-阿里OSS上传PHP版,自己改写项目中使用。另有EXTJS版kindeditor类如有需要请留言
  • unity oss上传文件

    千次阅读 2018-11-02 10:39:39
    今天研究了下在 unity 下做的 oss 上传,感觉应该分享下。 下面是官网的链接文档 https://help.aliyun.com/document_detail/91093.html?spm=a2c4g.11186623.6.908.1c712fc0rB0SQB 官网给的例子 using Aliyun.OSS...
  • 阿里云oss上传文件

    千次阅读 2018-08-08 11:18:42
    本博客是原创,讲的是如何上传文件到oss服务器,并且以python代码讲解为例: 上传文件目录下的视频到OSS服务器指定的目录,需要以下几个步骤: 1.需要在阿里云上注册一个OSS用户,创建自己的bucket,同时需要知道...
  • OSS上传图片 java

    2017-07-18 16:10:29
    maven: com.aliyun.oss aliyun-sdk-oss 2.4.0 @Configuration public class SpringConfig { @Autowired Environment env; @Bean(destroyMethod = "shutdown") public OSSClien
  • oss上传文件夹

    2019-03-19 15:19:23
    泽优软件云存储上传控件(cloud2)支持上传整个文件夹,并在云空间中保留文件夹的层级结构,同时在数据库中也写入层级结构信息。 文件与文件夹层级结构关系通过id,pid字段关联。 本地文件夹结构 文件 ...
  • 前端使用oss上传

    2020-06-16 10:08:24
    最近有需求想要使用oss长传缓解服务器压力,商议后决定使用前端自己上传oss不经过服务器端。在此记录一下过程: 项目使用的是vue,所以首先npm i --saveali-oss 页面或者在公共方法引如 import oss from 'ali-oss' ...
  • OSS自定义上传超过5G的资料无法上传,此demo支持上传5G以上的资料,使用js+html编写,
  • vue中使用上传OSS图片文件等操作。内含备注 直接调用唯一方法传参既可
  • oss上传下载图片

    千次阅读 2018-08-16 13:42:10
    //oss图片上传: 1、OSSManageUtil工具类 @SuppressWarnings(&amp;amp;quot;restriction&amp;amp;quot;) public class OSSManageUtil { /** * 上传OSS服务器文件 @Title: uploadFile * @param ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,893
精华内容 11,157
关键字:

oss上传头