1

Ниже моя функция для загрузки файла ГКС:Файл не активизирован после удаления System.out.println ("response ::" + conn.getResponseMessage());

public void fileUpload(InputStream streamData, String fileName, 
      String content_type) throws Exception { 

    byte[] utf8Bytes = fileName.getBytes("UTF8"); 
    fileName = new String(utf8Bytes, "UTF8"); 
    URL url = new URL("http://bucketname.storage.googleapis.com"+"/"+"foldername/"+fileName); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setDoOutput(true); 
    conn.setRequestMethod("PUT"); 
    conn.setRequestProperty("Accept", "application/x-www-form-urlencoded"); 
    conn.setRequestProperty("Authorization", "OAuth " + GcsToken.getAccessToken()); 
    conn.setRequestProperty("x-goog-meta-FileName", fileName); 
    conn.setRequestProperty("x-goog-meta-ContentType", content_type); 

    OutputStream os = conn.getOutputStream(); 

    BufferedInputStream bfis = new BufferedInputStream(streamData); 
    byte[] buffer = new byte[1024]; 
    int bufferLength = 0; 

    // now, read through the input buffer and write the contents to the file 

    while ((bufferLength = bfis.read(buffer)) > 0) { 
     os.write(buffer, 0, bufferLength); 

    } 

    System.out.println("response :: " + conn.getResponseMessage());// ????? 

} 

Этот код работает прекрасно uplaod файл, но После удаления последнего SYSOUT, не загружая файл System.out.println («ответ ::» + conn.getResponseMessage());

Какая причина этого?

любая помощь?

Thnaks

ответ

1

Вы должны закрыть OutputStream, чтобы указать, что вы закончили писать тело запроса:

os.close(); 

Вы должны также проверить код ответа запроса:

if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) { 
    // Error handling code here. 
} 

Причина, по которой она работала раньше, заключается в том, что функция getResponseMessage блокирует до тех пор, пока запрос не будет отправлен, и ответ будет получен редактор Без проверки значения ответа ваша функция просто выйдет, и HTTP-запрос может не завершиться.

0

Спасибо за пояснения. Я уже пробовал с os.close() также пробовал с os.flush(). но та же проблема. :(

наконец я обновил свой код:.

 while ((bufferLength = bfis.read(buffer)) > 0) { 
      os.write(buffer, 0, bufferLength); 

     } 
     os.close(); 
     if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) { 
      //logger 
     } 

Теперь я могу загрузить файл

Еще раз спасибо

.