2010-08-02 4 views
3

HTTP PUT을 사용하여 IIS 서버의 폴더에 파일을 업로드하는 데 Java 용 데스크톱 응용 프로그램을 쓰고 있습니다.Java에 HTTP put을 사용하여 파일 업로드

URLConnection urlconnection=null; 
    try{ 
    File file = new File("C:/test.txt"); 
    URL url = new URL("http://192.168.5.27/Test/test.txt"); 
    urlconnection = url.openConnection(); 
    urlconnection.setDoOutput(true); 
    urlconnection.setDoInput(true); 

    if (urlconnection instanceof HttpURLConnection) { 
    try { 
    ((HttpURLConnection)urlconnection).setRequestMethod("PUT"); 
    ((HttpURLConnection)urlconnection).setRequestProperty("Content-type", "text/html"); 
    ((HttpURLConnection)urlconnection).connect(); 


    } catch (ProtocolException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    } 


    BufferedOutputStream bos = new BufferedOutputStream(urlconnection 
    .getOutputStream()); 
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
    file)); 
    int i; 
    // read byte by byte until end of stream 
    while ((i = bis.read()) >0) { 
    bos.write(i); 
    } 
    System.out.println(((HttpURLConnection)urlconnection).getResponseMessage()); 
    } 
    catch(Exception e) 
    { 
    e.printStackTrace(); 
    } 
    try { 

    InputStream inputStream; 
    int responseCode=((HttpURLConnection)urlconnection).getResponseCode(); 
    if ((responseCode>= 200) &&(responseCode<=202)) { 
    inputStream = ((HttpURLConnection)urlconnection).getInputStream(); 
    int j; 
    while ((j = inputStream.read()) >0) { 
    System.out.println(j); 
    } 

    } else { 
    inputStream = ((HttpURLConnection)urlconnection).getErrorStream(); 
    } 
    ((HttpURLConnection)urlconnection).disconnect(); 

    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

이 프로그램은 대상 폴더 (테스트)에 빈 파일을 만듭니다. 내용은 파일에 기록되지 않습니다.

이 프로그램에 어떤 문제가 있습니까?

+1

에있는 동안 조건을 변경해야합니다 0 - 실제로 바이트 받은? – Bozho

+0

내용을 생성하지 않는 쓰기 작업에 대한 나의 첫 번째 접근 방식은 내가 갖고있는 모든 스트림을 플러시하는 것입니다. D 작성한 후 bos.flush()를 시도하십시오. – f1sh

답변

5

BufferedOutputStream을 작성하는 루프를 완료 한 후에는 bos.close()으로 전화하십시오. 그러면 스트림을 닫기 전에 버퍼링 된 데이터가 플러시됩니다.

1

가능한 버그 : bis.read()가 반환 할 수 유효한 당신은> = 0

내가 서버 측 디버깅에 의해 시작 했죠
관련 문제