- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试使用 GoLang 将图像上传到 s3 存储桶。我已经提到了程序的函数体。它将一个图像文件作为多部分表单数据和一个我应该将图像保存在 s3 中的文件名。
func uploadImage(res http.ResponseWriter, req *http.Request) {
file, handler, err := req.FormFile("uploaded_file") // uploaded_file is the key(input field name) of the form-data
if err != nil {
fmt.Println(err)
return
}
type Resp struct {
Status string `json:"status"`
Filename string `json:"filename"`
}
filename := req.Form.Get("filename")
rnd := render.New()
var Response Resp
Response.Status = "failed"
if filename != "" {
// define credentials
awsAccessKey := "KEY"
awsSecret := "SECRET"
token := ""
// set credentials
creds := credentials.NewStaticCredentials(awsAccessKey, awsSecret, token)
credentials, err := creds.Get()
if err != nil {
fmt.Printf("bad credentials: %s", err)
}
fmt.Println(credentials)
//setup config and s3 settings
cfg := aws.NewConfig().WithRegion("ap-southeast-1").WithCredentials(creds)
//create s3 credentail
svc := s3.New(session.New(), cfg)
type Sizer interface {
Size() int64
}
size := file.(Sizer).Size()
// create a buffer of size = images size
buffer := make([]byte, size)
file.Read(buffer)
fileBytes := bytes.NewReader(buffer)
fileType := http.DetectContentType(buffer)
path := "mybucketname/" + filename
params := &s3.PutObjectInput{
Bucket: aws.String("mybucketname"),
Key: aws.String(path),
Body: fileBytes,
ContentLength: aws.Int64(size),
ContentType: aws.String(fileType),
ACL: aws.String("public-read"),
}
resp, err := svc.PutObject(params)
if err != nil {
fmt.Printf("bad response: %s", err)
}
fmt.Printf("response %s", awsutil.StringValue(resp))
Response.Status = "success"
Response.Filename = awsutil.StringValue(resp)
}
defer file.Close()
res.Header().Set("Content-Type", "application/json")
rnd.JSON(res, http.StatusOK, Response)
}
此函数返回成功上传图片和文件名作为http响应的成功状态。
在控制台中我可以看到一些响应:
response {
ETag: "\"bd9be6ada974e66a154552edc78b4a81\""
}
我不知道 ETag 是什么意思,但我知道图像已上传并且我从 s3 得到了一些积极的回应。但是我找不到我在 s3 中上传的图片。
我需要一些帮助来解决这个问题。提前致谢。
最佳答案
您可以像这样检索上传的 s3 对象:
svc := s3.New(session.New(), cfg)
path := "mybucketname/" + filename
input := &s3.GetObjectInput{
Bucket: aws.String("mybucketname"),
Key: aws.String(path),
}
result, err := svc.GetObject(input)
if err != nil {
if aerr, ok := err.(awserr.Error); ok {
switch aerr.Code() {
case s3.ErrCodeNoSuchKey:
fmt.Println(s3.ErrCodeNoSuchKey, aerr.Error())
default:
fmt.Println(aerr.Error())
}
} else {
// Print the error, cast err to awserr.Error to get the Code and
// Message from an error.
fmt.Println(err.Error())
}
return
}
fmt.Println(result)
不要脸的外挂:您还可以使用我从以下链接创建的命令行工具来查看对象。
https://github.com/bharath-srinivas/nephele
你只需要做:
$ nephele s3 list <bucket-name> --prefix <prefix of the key/filename>
您可以在这里引用aws-sdk-go的官方文档:https://docs.aws.amazon.com/sdk-for-go/api/service/s3/#S3.GetObject
关于go - 文件上传到 s3 但不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49249633/
这个问题在这里已经有了答案: Why don't Java's +=, -=, *=, /= compound assignment operators require casting? (11 个
我搜索了很多,但没有一个链接能帮助我解决这个问题。我得到了 ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s
我正在做 RegexOne 正则表达式教程,它有一个 question关于编写正则表达式以删除不必要的空格。 教程中提供的解决方案是 We can just skip all the starting
([\s\S]+|\s?) 中 |\s? 的目的或作用是什么?如果没有它,表达式会不会与 ([\s\S]+) 相同? 最佳答案 这不是完全相同的。 ([\s\S]+|\s?) 会匹配空字符串,而 ([
这个正则表达式有一组还是两组? 我正在尝试使用第二组访问 bookTitle 但出现错误: Pattern pattern = Pattern.compile("^\\s*(.*?)\\s+-\\s+
在 C 中给定一个字符串指针 s,下面的迭代会做什么?即它以什么方式遍历字符串? for (++s ; *s; ++s); 最佳答案 for (++s ; *s;++s) 表示 将指针 s 递增到字符
我正在用一个 node.js 应用程序解析一个大列表并有这段代码 sizeCode = dbfr.CN_DESC.split('\s+-\s*|\s*-\s+') 这似乎不起作用,因为它返回了 [ '
我正在编写一个简单的字符串连接程序。 该程序按照我发布的方式运行。但是,我首先使用以下代码编写它来查找字符串的结尾: while (*s++) ; 但是,这个方法并没有奏效。我传递给它的字符串
这个问题已经有答案了: What does (?和aramchand来自Mohandas Karamchand G 因此,在使用这些匹配来分割字符串后,您最终会得到 {"M", "K", "G"} 注
我正在尝试转换 Map到 List使用 lambda。 本质上,我想将键和值与 '=' 连接起来之间。这看起来微不足道,但我找不到如何去做。 例如 Map map = new HashMap<>();
我正在经历 K & R,并且在递增指针时遇到困难。练习 5.3(第 107 页)要求您使用指针编写一个 strcat 函数。 在伪代码中,该函数执行以下操作: 将 2 个字符串作为输入。 找到字符串
在下面的代码中,pS 和 s.pS 在最后一行是否保证相等?也就是说,在语句S s = S();中,是否可以确定不会构造一个临时的S? #include using namespace std; s
演示示例代码: public void ReverseString(char[] s) { for(int i = 0, j = s.Length-1; i < j; i++, j--){
我一直在寻找类似于 .NET examples 中的示例的 PowerShell 脚本.取一个 New-TimeSpan 并显示为 1 天 2 小时 3 分钟 4 秒。排除其零的地方,在需要的地方添加
def func(s): s = s + " is corrected" return s string_list = ["She", "He"] for s in string_li
我是 python 的新手。当我在互联网上搜索 lambda 时。我在 lambda_functions 中找到了这个声明. processFunc = collapse and (lambda s:
我最近开始学习正则表达式,并试图为上面的问题写一个正则表达式。如果限制只放在一个字母上(例如不超过 2 个“b”),这并不困难。 那么答案就是:a* c*(b|ε)a* c*(b|ε)a* c* 但是
当我运行 npm install 时出现以下错误,但我无法修复它。 我试过:npm install -g windows-build-tools 也没有修复这个错误 ERR! configure
有很多有趣的haskell网上可以找到片段。 This post可以在 this (awesome) Stack Overflow question 下找到. The author写道: discou
我知道以下三行代码旨在将字符串提取到$ value中并将其存储在$ header中。但是我不知道$value =~ s/^\s+//;和$value =~ s/\s+$//;之间有什么区别。 $val
我是一名优秀的程序员,十分优秀!