使用Go to the box帐户上载文件和文件夹

使用Go to the box帐户上载文件和文件夹,go,box-api,Go,Box Api,对于下面的程序,我得到下面的错误。如果有人能帮我改正错误,那会很有帮助的。提前谢谢 func upload() { fmt.Println("dfxfgcghvjbjhiiiiiiiiiiiiiiiiiii") apiUrl := "https://upload.box.com/" resource := "api/2.0/files/content" data := url.Values{} data.Add("access_token", access

对于下面的程序,我得到下面的错误。如果有人能帮我改正错误,那会很有帮助的。提前谢谢

func upload() {
    fmt.Println("dfxfgcghvjbjhiiiiiiiiiiiiiiiiiii")
    apiUrl := "https://upload.box.com/"
    resource := "api/2.0/files/content"
    data := url.Values{}
    data.Add("access_token", accessobj.Access_token)
    authbear := "Bearer "
    authbear += accessobj.Access_token

    u, _ := url.ParseRequestURI(apiUrl)
    u.Path = resource
    urlStr := fmt.Sprintf("%v", u)
    client := &http.Client{}
    fmt.Println(urlStr)

    f, err := ioutil.ReadFile("C:\\Users\\vembu\\Desktop\\hi.txt")
    ioutil.WriteFile("hi.txt", f, 0x777)
    r, _ := http.NewRequest("POST", urlStr, bytes.NewBuffer(f))
    r.Header.Add("Authorization", "Bearer "+accessobj.Access_token)
    r.Header.Add("attributes",
        "{\"name\":\"hi.txt\",\"parent\":{\"id\":\"3098791209\"}}")
    r.Header.Add("file", "hi.txt")
    fmt.Println(r)
    if err != nil {
        fmt.Println("error......:", err)
    }

    resp, err1 := client.Do(r)
    if err1 != nil {
        fmt.Println("error:", err1)
    }
    fmt.Println("uploading")
    fmt.Println(resp)

    re, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("errorrrrr:", err)
    }
    fmt.Println(string(re))
}
我得到以下错误:

I face &{405 Method Not Allowed 405 HTTP/1.1 1 1
map[Allow:[GET, OPTIONS, HEAD] Content-Type:[text/html;charset=UTF-8]
Content-Length:[0] Date:[Thu, 12 Mar 2015 13:07:32 GMT] Age:[0]
Connection:[keep-alive]
Server:[ATS]] 0xc08200b8c0 0 [] false map[] 0xc08201f2b0 0xc082060980}

问题是您试图执行
httppost
请求:

r, _ := http.NewRequest("POST", urlStr, bytes.NewBuffer(f))
但服务器不允许/不支持响应错误中所述的操作(仅允许使用
GET
选项
HEAD
方法):

方法不允许405 HTTP/1.1映射[Allow:[GET,OPTIONS,HEAD]

根据使用
POST
上传文件的步骤,您需要使用多部分表单上传请求

您可以使用该包创建包含文件的多部分请求

下面是一个示例(不完整/未测试的代码):


虽然您的代码看起来很琐碎,但请对其应用一些格式。。。
buf := &bytes.Buffer{}
mw := multipart.NewWriter(buf)
defer mw.Close()
f, err := os.Open("C:\\Users\\vembu\\Desktop\\hi.txt")
if err != nil {
    // Handle error
}
defer f.Close()
ff, err := mw.CreateFormFile("name", "hi.txt")
if err != nil {
    // Handle error
}
if _, err = io.Copy(ff, f); err != nil {
    // Handle error
}

// TODO: INCLUDE OTHER FIELDS/PARAMS IN URL
r, err := http.NewRequest("POST", "https://upload.box.com/api/2.0/files/content", buf)
if err != nil {
    // Handle error
}
r.Header.Set("Content-Type", mw.FormDataContentType())
// TODO: ADD YOUR OTHER HEADER FIELDS

// Do the call: upload file
client := &http.Client{}
resp, err := client.Do(r)
if err != nil {
    // Handle error
}

if resp.StatusCode != http.StatusOK {
    fmt.Printf("Error: %v", resp.Status)
}