golang oss上传文件

1、上传文件 – oss上传Byte数组

代码:

func UploadFile(c *gin.Context) error  {
    var(
        err error
    )

    /*
        通过form-data上传文件,文件名:file
     */
    file,err := c.FormFile("file")
    if err != nil {
        return err
    }

    fileHandle,err := file.Open()   //打开上传文件
    if err != nil {
        return err
    }
    defer fileHandle.Close()
    fileByte,err :=  ioutil.ReadAll(fileHandle)  //获取上传文件字节流
    if err != nil {
        return err
    }

    url,err := upload_service.Upload(file.Filename,fileByte)

    c.JSON(http.StatusOK,gin.H{
        "error" : "",
        "errno" : "0",
        "dataType" : "OBJECT",
        "data" : gin.H{
            "url" : url,
        },
    })
    return nil
}

func Upload(fileName string,fileByte []byte)(url string,err error)  {
    /*
        oss 的相关配置信息
     */
    bucketName := config.GConfig.GetString("oss.bucket")
    endpoint := config.GConfig.GetString("oss.Endpoint")
    accessKeyId := config.GConfig.GetString("oss.AccessKeyId")
    accessKeySecret := config.GConfig.GetString("oss.AccessKeySecret")
    domain := config.GConfig.GetString("oss.domain")

    //创建OSSClient实例
    client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
    if err != nil {
        return url,err
    }

    // 获取存储空间
    bucket, err := client.Bucket(bucketName)
    if err != nil {
        return url,err
    }

    //上传阿里云路径
    folderName := time.Now().Format("2006-01-02")
    yunFileTmpPath := filepath.Join("uploads", folderName)  + "/" + fileName  //uploads/2020-06-17/GoLang (1).docx
      
    // 上传Byte数组
    err = bucket.PutObject(yunFileTmpPath, bytes.NewReader([]byte(fileByte)))
    if err != nil {
        return url,err
    }


    return domain + "/" + yunFileTmpPath ,nil
}

注:

1、先用ioutil.ReadAll获取文件的字节数
2、上传阿里云的oss地址不能有'/'

发表评论

电子邮件地址不会被公开。 必填项已用*标注