go实现上传文件到OSS(流式传输)

最近在项目中需要实现客户端上传文件的功能,因为考虑到用户量可能足够大,服务器的空间非常有限,所以不能再用普通的将这些资源放在服务器里的方式了。于是我上网检索更好的方式,发现可以把文件上传到OSS上,OSS上的资源包价格都还可以。于是我学习了阿里云的OSS的一些配置。并完成了上传文件到OSS的功能。本人使用的是阿里云的OSS服务

一、基础配置

首先可以新建一个Bucket,用来存放将上传的资源。

新建成功后,可以进到Bucket概览页面查看,里面有一些关键的参数,EndPoint等

接下来实现代码上传文件功能

func UploadHandler(c *gin.Context) {
	_, header, err := c.Request.FormFile("file")
	f, err := header.Open()
	if err != nil {
		zap.L().Error("接收文件失败", zap.Error(err))
		ResponseErrorWithMsg(c, CodeError, "接收文件失败")
	}
	// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
	endpoint := "自己Bucket对应的EndPoint"
	// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
	accessKeyId := "阿里云账号的AccessKey"
	accessKeySecret := "阿里云账号的AccessKeySecret"
	// yourBucketName填写存储空间名称。
	bucketName := "bucket名称"
	// uploadFileName填写文件上传的位置及名字。
	uploadFileName := "文件上传的位置及名字"
	// 创建OSSClient实例。
	client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
	if err != nil {
		handleError(err)
	}
	// 获取存储空间。
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		handleError(err)
	}
	// 上传文件。
	err = bucket.PutObject(uploadFileName, f)
	if err != nil {
		handleError(err)
	}
	ResponseSuccess(c, uploadPath)
}
func handleError(err error) {
	fmt.Println("Error:", err)
	os.Exit(-1)
}

需要前端传递的参数为

 因为该代码采用的是流式传输,所以不需要将要上传的文件先拷贝到项目目录下,再上传到OSS对象存储中。流式传输实现了直接从客户端点击上传后直接到OSS对象存储中,然后返回一个请求的地址,这个地址就是该文件的预览/下载地址。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值