2017-09-05 36 views
-1

我想下載的重定向URL文件,並在變量名返回的文件名,我實際的代碼是:golang下載文件,並按照重定向

package main 

import (
    "os" 
    "net/http" 
    "io" 
) 

func downloadFile(filepath string, url string) (err error) { 

    // Create the file 
    out, err := os.Create(filepath) 
    if err != nil { 
    return err 
    } 
    defer out.Close() 

    // Get the data 
    resp, err := http.Get(url) 
    if err != nil { 
    return err 
    } 
    defer resp.Body.Close() 

    // Writer the body to file 
    _, err = io.Copy(out, resp.Body) 
    if err != nil { 
    return err 
    } 

    return nil 
} 

func main() { 

    var filename string = "urls.txt" 
    var url1 string = "http://94.177.247.162:5000/random" 

    downloadFile(filename, url1) 

} 

如何我可以改變我的代碼返回下載文件的真實姓名在變量文件名。

示例輸出:

urlix.txt 
+0

是怎樣的文件名提供給你? – JimB

回答

2

重定向之後應默認。你可以使用

finalURL := resp.Request.URL.String()

URL的最後一部分是訪問將收購的下載最後的網址您在遠程所以像這樣的文件名應該工作

parts := strings.Split(finalURL, "/") filename := parts[len(parts)-1]

+0

如何在我的情況下更新?因爲需要首先創建文件來做請求 – kingcope

+0

在你的例子中,我不能看到任何你無法在請求下面移動文件的理由,如果你需要可以從下載函數返回的文件名。如果你真的需要把它放在前面,我認爲http.Head()可以工作 - 不是100%確定,如果這些重定向沒有經過測試,你可能需要明確地告訴它這樣做 – WebweaverD