删除 System.out.println( "response :: " + conn.getResponseMessage()) 后文件未上传;



上传GCS文件的功能如下:

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());// ?????
}

这段代码可以很好地上传文件,但是删除最后一个Sysout后,没有上传文件system . out。println("回应::"+ conn.getResponseMessage () );

这背后的原因是什么

有什么帮助吗?

thnaks

您需要关闭OutputStream以表示您已经完成了请求正文的编写:

os.close();

您还应该检查请求的响应代码:

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

它之前工作的原因是因为getResponseMessage函数阻塞,直到请求被发送完成并收到回复。不检查响应值,函数就退出,HTTP请求可能还没有发送完。

感谢您的澄清。我已经尝试了os.close()也尝试了os.flush()。但同样的问题。(

最后我已经更新了我的代码:

        while ((bufferLength = bfis.read(buffer)) > 0) {
            os.write(buffer, 0, bufferLength);
        }
        os.close();
        if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
            //logger
        } 

现在我可以上传文件了。

再次感谢。

相关内容

最新更新