谷粒学院(八)阿里云oss | 头像上传 | Nginx

2023-05-16

文章目录

    • 一、阿里云oss存储服务
      • 1、开通 “对象存储OSS”服务
      • 2、进入oss管理控制台
      • 3、Java代码操作阿里云oss上传文件
    • 二、后端集成OSS
      • 1、在service模块下创建子模块`service_oss`
      • 2、配置pom.xml
      • 3、配置application.properties
      • 4、主启动类
      • 5、启动主启动类,测试项目报错
    • 三、实现上传功能
      • 1、创建常用类,读取配置文件内容
      • 2、文件上传
      • 3、控制层
      • 4、重启oss服务,Swagger中测试文件上传
    • 四、Nginx 反向代理服务器
      • 1、安装window版的nginx
      • 2、配置nginx实现请求转发的功能
    • 五、添加讲师实现头像前端整合
      • 1、在添加讲师页面,创建上传组件,实现上传。
      • 2、添加讲师页面使用这个复制上传组件
      • 3、js脚本实现上传和图片回显
      • 4、设置默认头像
      • 5、启动测试即可


一、阿里云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)创建Maven项目

(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、启动测试即可


如果有收获!!! 希望老铁们来个三连,点赞、收藏、转发。
创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

谷粒学院(八)阿里云oss | 头像上传 | Nginx 的相关文章

  • 图书馆管理系统【SSM含SQL文件】

    项目源代码 https gitee com StarSea007 mylibrary ssm 编译环境 jdk 1 8mysql 5 0 及以上tomcat 8 框架 Spring 43 SpringMvc 43 Mybatis jar包管
  • Servlet及相关接口 【最全总结】

    1 Servlet 简介 1 xff09 从广义上来讲 xff0c Servlet 规范是 Sun 公司制定的一套技术标准 xff0c 包含与 Web 应用相关的一系列接口 xff0c 是 Web 应用实现方式的宏观解决方案 而具体的 Se
  • springmvc请求参数绑定 | 中文乱码 | 自定义类型转换器

    1 绑定的机制 表单中请求参数都是基于 key 61 value 的 SpringMVC 绑定请求参数的过程是通过把表单提交请求参数 xff0c 作为控制器中方法参数进行绑的 例如 xff1a span class token operat
  • 转发与重定向【面试题】

    请求转发与重定向 请求转发和重定向是 web 应用页面跳转的主要手段 xff0c 应用十分广泛 xff0c 所以我们一定要搞清楚他们的区别 1 请求转发 1 xff09 第一个 Servlet 接收到了浏览器端的请求 xff0c 进行了一定
  • 路径问题:相对路径与绝对路径

    1 提出问题 创建 Web 应用 Path xff0c 目录结构如图所示 在 a html 中有超链接 lt a href 61 34 b html 34 gt To b html lt a gt 如果先直接访问 a html xff0c
  • PyTorch:torch.Tensor.repeat()、expand()

    目录 1 torch Tensor repeat 2 torch Tensor expand 1 torch Tensor repeat 函数定义 xff1a repeat sizes Tensor 作用 xff1a 在指定的维度上重复这个
  • Cookie学习笔记

    1 cookie 简介 1 1 什么是 cookie cookie xff0c 有时我们也用其复数形式 cookies xff0c 是服务端保存在浏览器端的数据片段 以 key value 的形式进行保存 每次请求的时候 xff0c 请求头
  • mybatis中关于example类详解

    一 什么是example类 mybatis generator会为每个字段产生如上的Criterion xff0c 如果表的字段比较多 产生的Example类会十分庞大 理论上通过example类可以构造你想到的任何筛选条件 在mybati
  • springmvc实现文件上传与下载【单张及多张图片】

    一 springmvc实现文件上传的步骤 1 实现上传单张图片 1 导入pom 坐标 span class token comment lt 文件上传 gt span span class token tag span class toke
  • SpringBoot 搭建的个人博客

    介绍 blog是基于SpringBoot 搭建的个人博客 xff0c 响应式 前端技术 xff1a html css js jq bootstrap 后台技术 xff1a springboot thymeleaf mybatis mysql
  • SpringCloud(一)微服务概述

    文章目录 微服务概述什么是微服务微服务与微服务架构微服务的优缺点优点缺点 微服务的技术栈为什么选SpringCloud作为微服务架构选型依据当前各大IT公司的微服务架构各微服务的框架对比 SpringCloud入门概述SpringCloud
  • SpringCloud(二)入门案例之支付模块与订单模块的调用

    SpringCloud xff08 一 xff09 微服务概述 xff1a https blog csdn net weixin 45606067 article details 108481733 构建SpringCloud工程 概述 x
  • SpringCloud(三)Eureka服务注册中心

    文章目录 1 Eureka基础知识什么是服务治理什么是服务注册Eureka两大组件 2 Eureka介绍及原理理解介绍原理 3 单机版Eureka 构建步骤4 集群版Eureka 构建步骤Eureka集群原理说明EurekaServer集群
  • SpringCloud(四)zookeeper介绍及原理

    SpringCloud xff08 四 xff09 zookeeper介绍及原理 xff1a https blog csdn net weixin 45606067 article details 108499344 Zookeeper服务
  • docker 的安装 - 常用命令 - 应用部署

    文章目录 1 Docker简介什么是虚拟化什么是Docker容器与虚拟化比较Docker 组件1 Docker服务器与客户端2 Docker镜像与容器3 Register xff08 注册中心 xff09 2 Docker安装与启动安装Do
  • SpringCloud(六)Ribbon负载均衡服务调用

    Ribbon负载均衡 概述 是什么 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡工具 简单的说 xff0c Ribbon是Netflix发布的开源项目 xff0c 主要功能是提供客户端的
  • Python:map()函数使用详解

    1 函数定义 xff1a map function iterable 2 作用 xff1a 该函数通过接收一个函数function作为处理函数 xff0c 然后接收一个参数序列iterable xff0c 并使用处理函数对序列中的每个元素逐
  • SpringCloud(五)Consul服务注册与发现

    SpringCloud xff08 四 xff09 zookeeper介绍及原理 xff1a https blog csdn net weixin 45606067 article details 108538357 Consul简介 是什
  • SpringCloud(七)OpenFeign负载均衡服务调用

    1 概述 1 OpenFeign是什么 官网解释 xff1a https cloud spring io spring cloud static Hoxton SR1 reference htmlsingle spring cloud op
  • Zookeeper概述 | 安装部署(Windows和Linux)

    Zookeeper 一 Zokeeper 门 1 概述 Zookeeper是一个开源的分布式的 xff0c 为分布式应用提供协调服务的Apache项目 ZooKeeper is a centralized service for maint

随机推荐

  • Zookeeper内部原理

    Zookeeper概述 安装部署 xff08 Windows和Linux xff09 xff1a https blog csdn net weixin 45606067 article details 108619378 1 选举机制 面试
  • jsp和servlet的区别

    基本介绍 Servlet xff1a Servlet 是一种服务器端的Java应用程序 xff0c 具有独立于平台和协议的特性 xff0c 可以生成动态的Web页面 它担当客户请求 xff08 Web浏览器或其他HTTP客户程序 xff09
  • Session学习笔记

    1 session 简介 session 是我们 jsp 九大隐含对象的一个对象 session 称作域对象 xff0c 他的作用是保存一些信息 xff0c 而 session 这个域对象是一次会话期间使用同一个对象 所以这个对象可以用来保
  • session和cookie 区别【面试】

    说说Cookie和Session的区别 xff1f 1 存取方式的不同 xff08 Cookie只能保存ASCII xff0c Session可以存任意数据类型 xff09 Cookie中只能保管ASCII字符串 xff0c 假如需求存取U
  • JSP 九大内置对象,四大域对象

    JSP的九大内置对象 内置对象名 类型 request HttpServletRequest response HttpServletResponse session HttpSession application ServletConte
  • SpringCloud(八)Hystrix断路器

    文章目录 1 概述分布式系统面临的问题是什么能干嘛官网资料Hystrix官宣 xff0c 停更进维 2 Hystrix重要概念3 hystrix案例构建项目高并发测试故障现象和导致原因上诉结论如何解决 xff1f 解决的要求服务降级服务熔断
  • 谷粒学院(一)项目介绍

    一 项目背景 在线教育顾名思义 xff0c 是以网络为介质的教学方式 xff0c 通过网络 xff0c 学员与教师即使相隔万里也可以开展教学活动 xff0c 此外 xff0c 借助网络课件 xff0c 学员还可以随时随地进行学习 xff0c
  • PyTorch:Dataset()与Dataloader()的使用详解

    目录 1 Dataset类的使用 2 Dataloader类的使用 3 总结 Dataset类与Dataloader类是PyTorch官方封装的用于在数据集中提取一个batch的训练用数据的接口 xff0c 其实我们也可以自定义获取每个ba
  • MyBatisPlus(二)入门案例

    一 快速入门 使用第三方组件 xff1a 导入对应的依赖研究依赖如何配置代码如何编写提高扩展技术能力 操作步骤 1 创建数据库mybatis plus 2 创建user表 span class token keyword DROP span
  • MyBatisPlus(三)CRUD接口操作

    一 CRUD扩展 Insert 插入 span class token comment 测试插入 span span class token annotation punctuation 64 Test span span class to
  • MyBatisPlus(四)性能分析插件 | 条件构造器 | 代码生成器

    文章目录 一 性能分析插件1 导入插件2 测试使用 二 条件构造器1 ge gt le It isNull isNotNull2 eq ne3 between notBetween4 like noLike likeLeft likeRig
  • 谷粒学院(三)讲师管理模块后端 | swagger | 统一日志 | 统一返回结果

    文章目录 一 讲师查询功能二 讲师逻辑删除功能三 配置Swagger2四 统一返回数据格式五 创建统一结果返回类六 统一返回结果使用七 讲师分页查询八 讲师条件查询带分页九 自动填充封装十 讲师添加功能十一 讲师修改功能十二 统一异常处理十
  • 谷粒学院(二)项目搭建

    一 讲师管理模块 xff08 后端 xff09 准备工作 1 创建数据库 xff0c 创建讲师数据库 guli edu sql 2 模块说明 guli parent xff1a 在线教学根目录 xff08 父工程 xff09 xff0c 管
  • 谷粒学院(四)前端开发之ES6 | Vue

    文章目录 一 VSCode的安装及创建二 ES6简介三 ES6基本语法1 let声明变量2 const声明常量 xff08 只读变量 xff09 3 解构赋值4 模板字符串5 声明对象简写6 定义方法简写7 对象拓展运算符8 箭头函数 四
  • 谷粒学院(五)前端知识 nodejs | npm | babel | 模块化 | webpack

    一 nodejs 1 Node js是什么 简单的说 Node js 就是运行在服务端的 JavaScript Node js是一个事件驱动I O服务端JavaScript环境 xff0c 基于Google的V8引擎 xff0c V8引擎执
  • 系统上禁止运行脚本。有关详细信息, 请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies

    babel 无法加载文件 D studysoft nodejs babel ps1 xff0c 因为在此系统上禁止运行脚本 有关详细信息 xff0c 请参阅 https go microsoft com fwlink LinkID 61 1
  • 谷粒学院(六)前端页面搭建说明 | vue-element-admin

    文章目录 一 vue element admin1 简介2 安装 二 前端页面环境说明1 前端框架入口2 前端页面使用框架模板 xff0c 主要基于两种技术实现出来3 目录结构介绍 三 项目的创建和基本配置1 创建项目2 修改项目信息3 如
  • 谷粒学院(七)讲师列表前端实现

    一 讲师查询功能 1 添加路由 在 src router index js中 span class token punctuation span path span class token punctuation span span cla
  • Windows10:耳机插到前面板上没声音?

    今天买了副新耳机 xff0c 正开心地插到台式机的前面板接口上 xff0c 结果伤心地发现他竟然没声音T T xff0c 但是在手机上试一下还是能用的 xff01 折腾了好一会才发现问题的所在 xff01 耳机没声音有好多种情况 xff0c
  • 谷粒学院(八)阿里云oss | 头像上传 | Nginx

    文章目录 一 阿里云oss存储服务1 开通 对象存储OSS 服务2 进入oss管理控制台3 Java代码操作阿里云oss上传文件 二 后端集成OSS1 在service模块下创建子模块 96 service oss 96 2 配置pom x