Egg连接oss相关配置

537 阅读1分钟

package:


    "ali-oss": "^6.16.0",
    "egg": "^2.15.1",
   

config: plugin


  cors: {
    enable: true,
    package: 'egg-cors',
  },
  

config: plugin


  config.multipart = {
    mode: 'file',
    fileSize: '50mb',
    // fileExtensions: [ '.png', '.jpg' ], // 扩展几种上传的文件格式
  };
  
  config.security = {
    csrf: {
      enable: false,
    },
    domainWhiteList: ['*'], // 允许访问接口的白名单
  };
  config.cors = {
    origin: '*', // 允许跨域请求的地址
    allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS', // 允许跨域请求的方式
  };
  

router:

router.post(
    '/api/uploadimage',  controller.uploadPicture.upload
  );
  

contoller


'use strict';
const fs = require('mz/fs');
const OSS = require('ali-oss');

const aliInfo = {
  region: 'oss-cn-shanghai',
  bucket: '你的bucketname',
  accessKeyId: 'bucket accessKeyId ',
  accessKeySecret: 'bucket accessKeySecret',
};

const Controller = require('egg').Controller;
const client = new OSS(aliInfo);

class UploadPictureController extends Controller {
  async upload() {
    const { ctx } = this;
    const file = ctx.request.files[0];
    let img;
    try {
      const pathName = `image/${ctx.helper.getUUID() + file.filename}`;
      const result = await client.put(pathName, file.filepath);
      img = await ctx.model.Picture.create({
        userId,
        path: result.name,
        url: 'oss 配置的域名' + result.name,  // 配置oss的域名  是为了访问地址不是直接下载
      });
    } finally {
      // 需要删除临时文件
      await fs.unlink(file.filepath);
    }
    ctx.body = {
      img,
      state: 'success',
      msg: '新增成功',
    };
  }
}

module.exports = UploadPictureController;

附: 其实也有后端生成oss 凭证直接上传到oss 但是要考虑后期图片删除等操作

QA:

1.访问oss的图片地址直接就下载了,不可以直接在浏览器里访问 url: 'oss 配置的域名' + result.name, // 配置oss的域名 是为了访问地址不是直接下载 oss去配置下域名

2.访问或者下载的时候跨域问题