在寫入GCS文件之前,我想測試它是否存在。但是,我收到file.Stat
返回的錯誤,該錯誤返回,我在appengine/file
或appengine
中看不到任何導出的錯誤,我可以對其進行測試。從App Engine確定GCS中不存在文件的最佳方法是什麼?如何判斷是否存在具有此名稱的文件?
有可能我這樣做的方式完全是錯誤的,還有一些其他方法可以確保我不覆蓋或追加到現有文件。如果有的話,我也很想聽到這個消息。
我的再現代碼:
package main
import (
"net/http"
"fmt"
"appengine"
"appengine/file"
)
func init() {
http.HandleFunc("/test", reproduceHandler)
}
func reproduceHandler(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
// You'll need your own bucket name here
_, err := file.Stat(c, "/gs/my-bucket-name/my-file-name")
fmt.Fprintln(w, err)
}
這說明如下當我訪問 「/測試」:
API error 100 (file: EXISTENCE_ERROR)
文檔也不多說了。如果文件存在或不存在,Stat應該返回。 – fabrizioM
Stat返回一個'os.FileInfo'和一個'error'。在這種情況下,'os.FileInfo'是'','error'就像我的問題一樣。訣竅是從Stat可能返回的任何其他錯誤中消除該錯誤。 –
查看源代碼:https://code.google.com/p/appengine-go/source/browse/appengine/file/file.go#26如果文件不存在,它看起來總是會失敗,因爲實施的開放限制。如果文件存在,那麼它將能夠返回一個stat對象。 – fabrizioM