Skip to content

Instantly share code, notes, and snippets.

@SirmaXX
Last active April 5, 2019 17:33
Show Gist options
  • Save SirmaXX/1dc97a086c11eaa3796d3e6d674df3d7 to your computer and use it in GitHub Desktop.
Save SirmaXX/1dc97a086c11eaa3796d3e6d674df3d7 to your computer and use it in GitHub Desktop.
package main
//kullandığım kütüphaneler
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
//değişkenler
var (
fileInfo *os.FileInfo
err error
)
//gelen inputu istediğim şekilde ayırmak için ufak bir fonksiyon
func ChunkString(s string, chunkSize int) []string {
var chunks []string
runes := []rune(s)n
if len(runes) == 0 {
return []string{s}
}
for i := 0; i < len(runes); i += chunkSize {
nn := i + chunkSize
if nn > len(runes) {
nn = len(runes)
}
chunks = append(chunks, string(runes[i:nn]))
}
return chunks
}
//indirme işlemini yaoan fonksiyon
func downloadFromUrl(url string) {
//urli tokene dönüştürdüm
tokens := strings.Split(url, "/")
//dosya adını oluşturdum
fileName := tokens[len(tokens)-1]
fmt.Println("Downloading", url, "to", fileName)
//o filename'e ait dosyayı oluşturdum
f := createFile(fileName)
//urli çektim
response, err := http.Get(url)
check(err)
defer response.Body.Close()
//dosyanın bilgilerini almak için dosyayı açtım
file, err := os.Open(fileName)
check(err)
//dosyanın bilgilerini çekiyorum
fInfo, err := file.Stat()
check(err)
n:=fInfo.Size()
//dosya boyut kontrolü
if n < 1{
//burada yapacağımı bilmiyorum
for i := 1; i<=5; i++ {
fmt.Printf("Welcome %d times\n",i)
f := createFile(fileName)
io.Copy(f,response.Body)
}
}else{//eğer dosya 1 mbdan küçük ise
fmt.Println("ı want to this");
}
} //indirme fonksiyonun sonu
//hataları kontrollerini yapan fonksiyon
func check(e error){
if e != nil {
panic(e)
}
}
//dosyaları oluşturan basit fonksiyon
func createFile(p string)*os.File {
fmt.Println("creating")
output, err := os.Create(p)
check(err)
return output
}
func main() {
if len(os.Args) < 2 {
fmt.Fprintf(os.Stderr, "usage: %s url\n", os.Args[0])
os.Exit(1)
}
var justString string;
url := os.Args[1:]
justString = strings.Join( url," ")
downloadFromUrl(justString)
}
package main
//kullandığım kütüphaneler
import (
"fmt"
"net/http"
"os"
"strings"
"runtime"
"strconv"
)
//değişkenler
var (
fileInfo *os.FileInfo
err error
)
var (
client http.Client
)
var (
acceptRangeHeader = "Accept-Ranges"
)
func calculateprocess(processnumber int64,length int64,url string){
for j := int64(0) ;j <= processnumber; j++ {
if j <processnumber-1{
j++
}else{
}
}
}
//indirme işlemini yaoan fonksiyon
func downloadFromUrl(processnumber int64,url string) {
tokens := strings.Split(url, "/")
fileName := tokens[len(tokens)-1]
fmt.Println("Downloading", url, "to", fileName)
output :=createFile(fileName)
defer output.Close()
response:=getHeader(url)
contentLength := response.Header.Get("Content-Length")
length,_:= strconv.ParseInt(contentLength, 10, 64)
calculateprocess(processnumber, length, url)
//n, err := io.Copy(output, response.Body)
//check(err)
//fmt.Println(n, "bytes downloaded.")
} //indirme fonksiyonun sonu
//hataları kontrollerini yapan fonksiyon
func check(e error){
if e != nil {
panic(e)
}
}
func getHeader(url string) *http.Response {
req, err := http.NewRequest("GET", url, nil)
check(err)
resp, err := client.Do(req)
check(err)
return resp
}
//dosyaları oluşturan basit fonksiyon
func createFile(p string)*os.File {
fmt.Println("creating")
output, err := os.Create(p)
check(err)
return output
}
func main() {
if len(os.Args) < 2 {
fmt.Fprintf(os.Stderr, "usage: %s url\n", os.Args[0])
os.Exit(1)
}
var justString string;
url := os.Args[1:]
process := runtime.NumCPU()
justString = strings.Join( url," ")
downloadFromUrl(int64(process) ,justString)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment