File upload 使用OS Open将Golang文件上载到s3
我正在尝试使用Golang和AmazonS3API将图像上传到我的s3帐户。如果我硬编码直接路径,比如File upload 使用OS Open将Golang文件上载到s3,file-upload,go,amazon-s3,File Upload,Go,Amazon S3,我正在尝试使用Golang和AmazonS3API将图像上传到我的s3帐户。如果我硬编码直接路径,比如 file, err := os.Open("/Users/JohnSmith/Documents/pictures/cars.jpg") defer file.Close() if err != nil { fmt.Printf("err opening file: %s", err) } 如果我像那样硬编码文件路径,那么图片将上传到我的s3帐户。然
file, err := os.Open("/Users/JohnSmith/Documents/pictures/cars.jpg")
defer file.Close()
if err != nil {
fmt.Printf("err opening file: %s", err)
}
如果我像那样硬编码文件路径,那么图片将上传到我的s3帐户。然而,这种方法并不好,因为我显然无法硬编码我想要上传的每个图像的直接图像路径。我的问题是如何上传图像而不必硬编码路径。这将是一个API的一部分,用户将上传图像,所以我显然不能有一个硬编码的路径。这是我的代码,首先是HTML
<form method="post" enctype="multipart/form-data" action="profile_image">
<h2>Image Upload</h2>
<p><input type="file" name="file" id="file"/> </p>
<p> <input type="submit" value="Upload Image"></p>
</form>
这是我上面的完整代码,但是当我尝试执行以下操作时
file, err := os.Open("file")
defer file.Close()
if err != nil {
fmt.Printf("err opening file: %s", err)
}
我得到以下错误
http: panic serving [::1]:55454: runtime error: invalid memory address or nil pointer dereference
goroutine 7 [running]:
err opening file: open file: no such file or directorynet/http.(*conn).serve.func1(0xc420076e80)
我不能使用绝对路径(filepath.Abs()),因为一些文件将在GoPath之外,并且如前所述,其他用户将上载。无论如何,我都可以获得相对路径。在发布到API后,默认情况下,图像临时保存在操作系统的临时目录中(不同操作系统的图像不同)。要获取此目录,您可以使用,例如:
func GetTempLoc(filename string) string {
return strings.TrimRight(os.TempDir(), "/") + "/" + filename
}
其中:
- filename是一个header.filename,即在POST请求中收到的文件名。在Gin Gonic框架中,您可以在请求处理程序中获得它,如下所示:
文件,头,错误:=c.Request.FormFile(“文件”)
如果出错!=零{
返回,错误
}
延迟文件。关闭()
示例:
我相信在你的框架中会有类似的情况
- TempDir()是一个函数,用于为您提供一个临时文件夹(详细信息:)
- TrimRight用于确保os.TempDir的结果在不同的os上是一致的
file, err := os.Open(GetTempLoc(fileName))
...
在发布到API后,默认情况下,图像临时保存在操作系统的临时目录中(不同操作系统的临时目录不同)。要获取此目录,您可以使用,例如:
func GetTempLoc(filename string) string {
return strings.TrimRight(os.TempDir(), "/") + "/" + filename
}
其中:
- filename是一个header.filename,即在POST请求中收到的文件名。在Gin Gonic框架中,您可以在请求处理程序中获得它,如下所示:
文件,头,错误:=c.Request.FormFile(“文件”)
如果出错!=零{
返回,错误
}
延迟文件。关闭()
示例:
我相信在你的框架中会有类似的情况
- TempDir()是一个函数,用于为您提供一个临时文件夹(详细信息:)
- TrimRight用于确保os.TempDir的结果在不同的os上是一致的
file, err := os.Open(GetTempLoc(fileName))
...