简单上传(GO)

最近更新时间:2023-01-11 10:41:07

简单上传

以下代码用于上传文件:

package ks3test

import (
	"bufio"
	"bytes"
	"github.com/ks3sdklib/aws-sdk-go/aws/awserr"
	"github.com/ks3sdklib/aws-sdk-go/aws/awsutil"
	"net/url"
	"strconv"
	"strings"
	"testing"
	"time"
	//	"io"
	"fmt"
	"github.com/ks3sdklib/aws-sdk-go/aws"
	"github.com/ks3sdklib/aws-sdk-go/aws/credentials"
	"github.com/ks3sdklib/aws-sdk-go/service/s3"
	"net/http"
	"os"
)

var bucket = string("yourbucket")
var key = string("yourkey")
var key_encode = string("yourkey")
var key_copy = string("yourkey")
var content = string("content")
var prefix = "test/" //目录名称

// 金山云主账号 AccessKey 拥有所有API的访问权限,风险很高。
// 强烈建议您创建并使用子账号账号进行 API 访问或日常运维,请登录 https://uc.console.ksyun.com/pro/iam/#/user/list 创建子账号。
// 通过指定 host(Endpoint),您可以在指定的地域创建新的存储空间。
var cre = credentials.NewStaticCredentials("ak", "sk", "") //online
var svc = s3.New(&aws.Config{
	//Region 可参考 [https://docs.ksyun.com/documents/6761](https://docs.ksyun.com/documents/6761)
	Region:      "BEIJING",
	Credentials: cre,
	//Endpoint 可参考 [https://docs.ksyun.com/documents/6761](https://docs.ksyun.com/documents/6761)
	Endpoint:         "ks3-cn-beijing.ksyuncs.com",
	DisableSSL:       true, //是否禁用https
	LogLevel:         1,    //是否开启日志,0为关闭日志,1为开启日志
	LogHTTPBody:      true, //是否把HTTP请求body打入日志
	S3ForcePathStyle: true,
	Logger:           nil, //打日志的位置
})

//上传文件
func putObj(svc *s3.S3) {

	//获取本地文件FD
	fd, _ := os.Open("D:\\suiyi.jpg")

	//指定目标Object对象标签,可同时设置多个标签,如:TagA=A&TagB=B。
	//说明 Key和Value需要先进行URL编码,如果某项没有“=”,则看作Value为空字符串。详情请见对象标签([https://docs.ksyun.com/documents/39576](https://docs.ksyun.com/documents/39576))。
	v := url.Values{}
	v.Add("name", "yz")
	v.Add("age", "11")
	XAmzTagging := v.Encode()

	input := s3.PutObjectInput{
		Bucket:      aws.String(bucket),
		Key:         aws.String(key),
		ACL:         aws.String("public-read"),
		Body:        fd,
		XAmzTagging: aws.String(XAmzTagging),
	}
	resp, _ := svc.PutObject(&input)
	fmt.Println("结果:\n", awsutil.StringValue(resp))
}

上传文件的更多信息,请参见 PUT Object

抓取第三方URL上传到KS3

以下代码用于抓取第三方URL上传到KS3:

package ks3test

import (
	"bufio"
	"bytes"
	"github.com/ks3sdklib/aws-sdk-go/aws/awserr"
	"github.com/ks3sdklib/aws-sdk-go/aws/awsutil"
	"net/url"
	"strconv"
	"strings"
	"testing"
	"time"
	//	"io"
	"fmt"
	"github.com/ks3sdklib/aws-sdk-go/aws"
	"github.com/ks3sdklib/aws-sdk-go/aws/credentials"
	"github.com/ks3sdklib/aws-sdk-go/service/s3"
	"net/http"
	"os"
)

var bucket = string("yourbucket")
var key = string("yourkey")
var key_encode = string("yourkey")
var key_copy = string("yourkey")
var content = string("content")
var prefix = "test/" //目录名称

// 金山云主账号 AccessKey 拥有所有API的访问权限,风险很高。
// 强烈建议您创建并使用子账号账号进行 API 访问或日常运维,请登录 https://uc.console.ksyun.com/pro/iam/#/user/list 创建子账号。
// 通过指定 host(Endpoint),您可以在指定的地域创建新的存储空间。
var cre = credentials.NewStaticCredentials("ak", "sk", "") //online
var svc = s3.New(&aws.Config{
	//Region 可参考 [https://docs.ksyun.com/documents/6761](https://docs.ksyun.com/documents/6761)
	Region:      "BEIJING",
	Credentials: cre,
	//Endpoint 可参考 [https://docs.ksyun.com/documents/6761](https://docs.ksyun.com/documents/6761)
	Endpoint:         "ks3-cn-beijing.ksyuncs.com",
	DisableSSL:       true, //是否禁用https
	LogLevel:         1,    //是否开启日志,0为关闭日志,1为开启日志
	LogHTTPBody:      true, //是否把HTTP请求body打入日志
	S3ForcePathStyle: true,
	Logger:           nil, //打日志的位置
})

//抓取第三方URL上传到KS3
func fetchObj(svc *s3.S3) {

	//指定目标Object对象标签,可同时设置多个标签,如:TagA=A&TagB=B。
	//说明 Key和Value需要先进行URL编码,如果某项没有“=”,则看作Value为空字符串。详情请见对象标签([https://docs.ksyun.com/documents/39576](https://docs.ksyun.com/documents/39576))。
	v := url.Values{}
	v.Add("schoole", "bbvvvvvv")
	v.Add("class", "123123123123")
	XAmzTagging := v.Encode()

	//源站url
	sourceUrl := "https://img0.pconline.com.cn/pconline/1111/04/2483449_20061139501.jpg"
	input := s3.FetchObjectInput{
		Bucket:      aws.String(bucket),
		Key:         aws.String("dst/testa"),
		SourceUrl:   aws.String(sourceUrl),
		XAmzTagging: aws.String(XAmzTagging),   //对象tag
		ACL:         aws.String("public-read"), //对象acl
	}
	resp, _ := svc.FetchObject(&input)
	fmt.Println("结果:\n", awsutil.StringValue(resp))
}

上传加密

以下代码用于上传加密:

package ks3test

import (
	"bufio"
	"bytes"
	"github.com/ks3sdklib/aws-sdk-go/aws/awserr"
	"github.com/ks3sdklib/aws-sdk-go/aws/awsutil"
	"net/url"
	"strconv"
	"strings"
	"testing"
	"time"
	//	"io"
	"fmt"
	"github.com/ks3sdklib/aws-sdk-go/aws"
	"github.com/ks3sdklib/aws-sdk-go/aws/credentials"
	"github.com/ks3sdklib/aws-sdk-go/service/s3"
	"net/http"
	"os"
)

var bucket = string("yourbucket")
var key = string("yourkey")
var key_encode = string("yourkey")
var key_copy = string("yourkey")
var content = string("content")
var prefix = "test/" //目录名称

// 金山云主账号 AccessKey 拥有所有API的访问权限,风险很高。
// 强烈建议您创建并使用子账号账号进行 API 访问或日常运维,请登录 https://uc.console.ksyun.com/pro/iam/#/user/list 创建子账号。
// 通过指定 host(Endpoint),您可以在指定的地域创建新的存储空间。
var cre = credentials.NewStaticCredentials("ak", "sk", "") //online
var svc = s3.New(&aws.Config{
	//Region 可参考 [https://docs.ksyun.com/documents/6761](https://docs.ksyun.com/documents/6761)
	Region:      "BEIJING",
	Credentials: cre,
	//Endpoint 可参考 [https://docs.ksyun.com/documents/6761](https://docs.ksyun.com/documents/6761)
	Endpoint:         "ks3-cn-beijing.ksyuncs.com",
	DisableSSL:       true, //是否禁用https
	LogLevel:         1,    //是否开启日志,0为关闭日志,1为开启日志
	LogHTTPBody:      true, //是否把HTTP请求body打入日志
	S3ForcePathStyle: true,
	Logger:           nil, //打日志的位置
})

//上传加密
//服务器端加密关乎静态数据加密,即 KS3 在将您的数据写入数据中心内的磁盘时会在对象级别上加密这些数据,并在您访问这些数据时为您解密这些数据。
//只要您验证了您的请求并且拥有访问权限,您访问加密和未加密数据元的方式就没有区别。
//例如,如果您使用预签名的 URL 来共享您的对象,那么对于加密和解密对象,该 URL 的工作方式是相同的。
func TestPutObjectWithSSEC(svc *s3.S3) {
	resp, _ := svc.PutObject(&s3.PutObjectInput{
		Bucket:               aws.String(bucket),
		Key:                  aws.String(key),
		SSECustomerAlgorithm: aws.String("AES256"), //加密类型
		SSECustomerKey:       aws.String("12345678901234567890123456789012"),
	})
	fmt.Println("结果:\n", awsutil.StringValue(resp))
}

文档内容是否对您有帮助?

根本没帮助
文档较差
文档一般
文档不错
文档很好

在文档使用中是否遇到以下问题

内容不全,不深入
内容更新不及时
描述不清晰,比较混乱
系统或功能太复杂,缺乏足够的引导
内容冗长

更多建议

0/200

评价建议不能为空

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

问题反馈