2017-12-01 20 views
0

서버에 zip 파일을 보내는 응용 프로그램이 있습니다. 그런 다음 zip이 조작되고 새로운 zip이 응답으로 전송됩니다.서버에서 잘못된 mime으로 인해 이동으로 Zip을 열 수 없습니다.

문제는 다시 보낸 응답이 application/zip 메시지 대신 application/octet-stream의 MIME을 갖는 것입니다.

결과 우편 번호가 archive/zip으로 열리지 않고 zip: not a valid zip file이되는 이유가 여기 있다고 생각합니다.

zip 파일을 검색 할 때 MIME을 바꿀 수있는 방법이 있습니까? 우편을 얻기를위한

내 코드 :

func GetZipFromServer(zipname string) { 

    //////////////////////////////////////////////////// 
    // Open local zip file 

    file, err := os.Open(zipname + ".zip") 
    log1.Check(err, "File open failed") 
    defer file.Close() 

    stat, err := file.Stat() 
    log1.Check(err, "Stat failed") 

    fmt.Println(stat.Size()) 

    //////////////////////////////////////////////////// 
    // Get new zip from server 

    url := "http://some_server123.com/rest/" 
    res, err := http.Post(url, "application/zip", file) 
    log1.Check(err, "Response failed") 

    //////////////////////////////////////////////////// 
    // Save new zip from server as file 

    f, err := os.Create(zipname + ".html.zip") 
    log1.Check(err, "Cannot create file") 

    err = res.Write(f) 
    log1.Check(err, "Cannot write file") 

    err = f.Close() 
    log1.Check(err, "Cannot close file") 
} 
+0

서버에서 ** 처리 ** ** 헤더를 설정해야합니다. –

+0

서버에 액세스 할 수없는 경우이 작업을 수행 할 수 있습니까? – AppTest

+0

불행히도 아닙니다; 마임은 서버 측에 설정해야합니다. –

답변

1

Response.Write 방법은 인수에 대한 서버 응답 형식으로 응답을 기록합니다. 그것은 당신이 원하는 것이 아닙니다.

사용 io.Copy 파일로 응답 본문을 복사하려면 :

또한
func GetZipFromServer(zipname string) { 
    file, err := os.Open(zipname + ".zip") 
    log1.Check(err, "File open failed") 
    defer file.Close() 

    stat, err := file.Stat() 
    log1.Check(err, "Stat failed") 

    fmt.Println(stat.Size()) 

    url := "http://some_server123.com/rest/" 
    res, err := http.Post(url, "application/zip", file) 
    log1.Check(err, "Response failed") 

    defer resp.Body.Close() 

    f, err := os.Create(zipname + ".html.zip") 
    log1.Check(err, "Cannot create file") 

    _, err := io.Copy(f, resp.Body) 
    log1.Check(err, "Cannot write file") 

    err = f.Close() 
    log1.Check(err, "Cannot close file") 
} 

, 응답 본체를 닫습니다.

+0

정말 고맙습니다. 서버 응답 형식으로 작성할 때의 차이점은 무엇입니까? 그것은 "머리글, ​​비 정식 키에 대한 가치는 예측할 수없는 행동을 할 것입니다"라는 글쓰기 문서와 관련이 있습니까? – AppTest

+0

HTTP 응답에는 상태 줄, 머리글, 빈 줄 및 본문이있을 수 있습니다 (일부 인코딩 일 수도 있음). zip 파일이 본문입니다. HTTP 프로토콜에 익숙하지 않다면 https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages 페이지가 도움이 될 것입니다. –