Golang中如何使用ioutil.WriteFile将文件保存到指定目录
Golang中如何使用ioutil.WriteFile将文件保存到指定目录
// 此页面提供用于测试的Base64编码小型自定义图像
package main
import (
b64 "encoding/base64"
"io/ioutil"
"time"
"math/rand"
)
func main() {
data := "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAQAAADa613fAAAAaUlEQVR42u3PQREAAAgDINc/9Izg34MGpJ0XIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiJyWYprx532021aAAAAAElFTkSuQmCC"
sDec, _ := b64.StdEncoding.DecodeString(data)
rand.Seed(time.Now().UnixNano())
ioutil.WriteFile( randSeq(12) +".jpg",sDec, 0644)// 这可以工作
// 这个不行
ioutil.TempDir( "img/", randSeq(12) +".jpg") // 这是我需要的方式
}
var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
func randSeq(n int) string {
b := make([]rune, n)
for i := range b {
b[i] = letters[rand.Intn(len(letters))]
}
return string(b)
}
更多关于Golang中如何使用ioutil.WriteFile将文件保存到指定目录的实战教程也可以访问 https://www.itying.com/category-94-b0.html
没有返回任何错误,我今晚会再试一次,但这代码不工作真的很奇怪。
更多关于Golang中如何使用ioutil.WriteFile将文件保存到指定目录的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
是的,但它不接受位置参数,这就是问题所在。我以为我修复了,但并没有。
当然,它确实接受这个位置,只是在你写入之前,这个位置需要已经存在。
你可以直接向 WriteFile 提供相对路径或绝对路径,不过我不太确定你使用 TempFile 的目的是什么。
将文件写入 img/ 目录下,例如 img/foo.jpg
你说得对,我之前只是搞混了,它的工作原理是这样的
ioutil.WriteFile("img/"+randSeq(12)+".jpg", sDec, 0644)
然后只需执行 ioutil.WriteFile("img/foo.jpg", data, mode)。
func main() {
fmt.Println("hello world")
}
到目前为止,我对一个简单的事情感到困惑, 如何让这段代码使用我名为 img 的文件夹位置
ioutil.WriteFile(randSeq(12)+".jpg", sDec, 0644)
你是想将文件写入 img/ 目录下,例如 img/foo.jpg 吗?还是想先在 img/ 目录下创建一个临时目录,然后再将文件写入这个临时目录内,例如 foo/someRandomTempDir/foo.jpg?
尝试类似这样的方法:
path := "img/" + randSeq(12) + ".jpg"
if err := ioutil.WriteFile(path, sDec, 0644); err != nil {
log.Panic(err)
}
fmt.Println(path)
在Golang中使用ioutil.WriteFile将文件保存到指定目录,需要先构建完整的文件路径。以下是修正后的代码示例:
package main
import (
b64 "encoding/base64"
"io/ioutil"
"path/filepath"
"time"
"math/rand"
)
func main() {
data := "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAQAAADa613fAAAAaUlEQVR42u3PQREAAAgDINc/9Izg34MGpJ0XIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiJyWYprx532021aAAAAAElFTkSuQmCC"
sDec, _ := b64.StdEncoding.DecodeString(data)
rand.Seed(time.Now().UnixNano())
// 构建完整文件路径
filename := randSeq(12) + ".jpg"
dirPath := "img/"
fullPath := filepath.Join(dirPath, filename)
// 写入文件到指定目录
ioutil.WriteFile(fullPath, sDec, 0644)
}
var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
func randSeq(n int) string {
b := make([]rune, n)
for i := range b {
b[i] = letters[rand.Intn(len(letters))]
}
return string(b)
}
关键点:
- 使用
filepath.Join()构建跨平台的完整路径 - 确保目标目录存在(如果需要可以添加目录创建逻辑)
ioutil.WriteFile()需要完整的文件路径作为第一个参数
如果需要确保目录存在,可以添加:
import "os"
// 在写入文件前检查并创建目录
if _, err := os.Stat("img/"); os.IsNotExist(err) {
os.MkdirAll("img/", 0755)
}


