Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 如何将图像添加到Go中的特定文件夹中?获取错误,如:`%!(EXTRA*fs.PathError=open/photos:只读文件系统)`_Image_File_Go_Directory - Fatal编程技术网

Image 如何将图像添加到Go中的特定文件夹中?获取错误,如:`%!(EXTRA*fs.PathError=open/photos:只读文件系统)`

Image 如何将图像添加到Go中的特定文件夹中?获取错误,如:`%!(EXTRA*fs.PathError=open/photos:只读文件系统)`,image,file,go,directory,Image,File,Go,Directory,我正在尝试将图像放入Golang的特定文件夹中。下面是代码。 这是我在根目录中创建名为photos的文件夹的函数 func createPhotoFolder(folderName string) { err := os.Mkdir(folderName, 777) if err != nil { fmt.Println("Error creating folder: ", err) return } fmt.P

我正在尝试将图像放入Golang的特定文件夹中。下面是代码。 这是我在根目录中创建名为
photos
的文件夹的函数

func createPhotoFolder(folderName string) {
    err := os.Mkdir(folderName, 777)
    if err != nil {
        fmt.Println("Error creating folder: ", err)
        return
    }
    fmt.Println(folderName, " created successfully in the root directory")
}
这是我发出get请求获取图像并尝试将它们放入我先前创建的
photos
文件夹的函数

func downloadImages(urls []string) {
    for i, url := range urls {
        resp, err := http.Get(url)
        fmt.Printf("%d inside for loop\n", i)
        if err != nil {
            log.Fatal("error fetching image: ", err)
        }
        defer resp.Body.Close()
        out, err := os.Create("photos")
        if err != nil {
            log.Printf("Can't put image into folder: ", err)
        }
        defer out.Close()
    }
}
这是我运行程序时遇到的错误

1-如果文件夹名称是以这种方式写入的,则在不使用正斜杠的情况下创建(“照片”),我会收到如下错误消息

Can't put image into folder: %!(EXTRA *fs.PathError=open photos: is a directory)
Can't put image into folder: %!(EXTRA *fs.PathError=open /photos: read-only file system)
2-如果我像操作系统那样编写,那么创建(“/photos”)。我得到的错误如下

Can't put image into folder: %!(EXTRA *fs.PathError=open photos: is a directory)
Can't put image into folder: %!(EXTRA *fs.PathError=open /photos: read-only file system)
我在以chmod的方式创建
photos
文件夹时授予了所有权限。 我确实尝试过使用
io.Copy()
,但它需要一个文件参数,而在使用
os.Create()创建文件时,我没有得到该参数


我应该如何创建文件夹并将图像正确地放入其中?

下面是一个小程序,它完成了我认为您正在尝试的操作:

package main

import (
   "net/http"
   "os"
   "path/filepath"
)

func downloadImages(links []string) error {
   tmp := os.TempDir()
   for _, link := range links {
      println(link)
      res, err := http.Get(link)
      if err != nil { return err }
      defer res.Body.Close()
      file, err := os.Create(filepath.Join(tmp, filepath.Base(link)))
      if err != nil { return err }
      defer file.Close()
      file.ReadFrom(res.Body)
   }
   return nil
}

func main() {
   links := []string{
      "http://cdn.sstatic.net/Sites/stackoverflow/Img/apple-touch-icon.png",
      "http://cdn.sstatic.net/Sites/stackoverflow/Img/favicon.ico",
   }
   err := downloadImages(links)
   if err != nil {
      panic(err)
   }
}
您需要修改它,因为您使用的是不同的目录,但它应该 开始吧


在您的代码中,在os.Create中,它应该包含要创建的文件的完整地址以及要创建的文件的名称。比如:

gopath := "C:/Users/<username>/go/src/photos/" //where photos is the folder you created 
filename := "photo1.jpg"

out, err := os.Create(gopath + filename)
并将图像保存到您的系统中

out.Readfrom(resp.Body)

photos
是您创建的目录。您必须在它下面创建一个文件,比如
os.create(“photos/filename”)
从正确使用Printf参数开始。如果你有麻烦,就去看兽医。