0

HTTPS를 통해 파일을 다운로드하고 시간 소인을 보존하고 파일 이름에 content-disposition을 사용하는 가장 간단한 Java 방법은 무엇입니까? apache-httpclient보다 높은 수준의 Java 라이브러리가 있습니까?java를 사용하여 메타 데이터를 보존하는 파일을 다운로드하는 방법은 무엇입니까?

은 현재 내가 가지고 :

HttpClient httpClient = new DefaultHttpClient(); 
    HttpResponse httpResponse = httpClient.execute(new HttpGet(parser.sourceUrl)); 
    Header cd = httpResponse.getLastHeader("Content-Disposition"); 
    String filename = cd.getValue().split(";")[1].split("=")[1]; // TODO(jayen): unhack 
    HttpEntity httpEntity = httpResponse.getEntity(); 
    System.out.println("Saving " + filename); 
    httpEntity.writeTo(new FileOutputStream(folder.getCanonicalPath() + File.separator + filename)); 
    if (httpResponse.containsHeader("Last-Modified")) { 
     System.err.println("Please implement timestamping"); 
    } else { 
     System.out.println("No timestamp available!"); 
    } 
+0

Content-Disposition 구문 분석은 가장 간단한 경우에만 작동합니다. 사양 (RFC 6266)을 참조 할 수 있습니다. –

답변

0

HTTP 프로토콜 또는 멀티 콘텐츠 형식 사양 어느 임의의 소스 파일의 메타 데이터를 인코딩의 방법을 제공합니다. HTTP 사양은 서버가 설정할 수있는 Last-Modified 헤더를 정의하지만 반드시 그렇게 할 필요는 없습니다. 그러나 더 중요한 것은 일반적인 브라우저가이 타임 스탬프를 보존하지 않는다는 것입니다. Content-Disposition 헤더는 HTTP 1.1 스펙의 일부는 아니지만 어쨌든 많은 서버가이를 지원합니다.

옵션 : 당신이 가져 오는을 할 수있는 자바 라이브러리를 사용하는 경우

  • 는, 당신은 응답 헤더에서 "수정"타임 스탬프 및 내용 처리를 얻을 수 있어야합니다. 관련 클라이언트 라이브러리의 자습서 정보를 참조하십시오.

  • wget 또는 curl 또는 이와 동등한 것을 사용할 수있는 경우 타임 스탬프를 보존 할 수 있어야합니다.

  • 타임 스탬프를 보존하는 (신뢰할 수있는) 플러그인을 설치할 수 있습니다. 예 : Firefox 용 : https://addons.mozilla.org/en-us/firefox/addon/preserve-download-modification/. 그러나 보안상의 이유로 신뢰할 수없는 Javascript에서는이 작업을 수행 할 수 없다고 생각합니다.

  • 포함 할 메타 데이터를 나타낼 수있는 아카이브 형식으로 파일을 패키지하고 해당 파일을 아카이브로 다운로드하도록 서버를 변경할 수 있습니다. 그런 다음 관련 archive extractor 명령을 사용하여 파일을 추출하십시오. 이렇게하면 원래 소유자, 액세스 제어 세부 정보 등과 같은 다른 메타 데이터를 전송할 수 있습니다.

또는 Linux/Unix "scp"또는 "rsync"명령을 사용하여 파일을 전송할 수 있습니다.

+0

저는 현재 귀하의 첫 번째 옵션을 수행하고 있습니다. Java 프로그램을 작성 중이며 쉘 명령을 실행하지 않는 것이 좋습니다. – Jayen