将大文件上传到谷歌云存储超时

时间:2013-09-06 18:29:12

标签: google-cloud-storage

我在将大型文件上传到Google云端存储时遇到问题。我成功上传了一个700MB的文件,但是当我尝试了5GB的文本文件时,它抛出了以下异常。我无法找到Google搜索的解决方案。

问题在于简单java类的主要方法。

Exception in thread "main" java.lang.RuntimeException: java.net.SocketTimeoutException: Read timed out

Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:150)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:312)
    at sun.security.ssl.InputRecord.read(InputRecord.java:350)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)
    at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:850)
......

3 个答案:

答案 0 :(得分:1)

Getting java.net.SocketTimeoutException: Connection timed out in android看起来您可能需要跳过连接超时设置。该链接适用于Android,但同样适用,并且实现完全相同。

答案 1 :(得分:1)

对于较大的文件,特别是在移动设备和无线连接上,您更有可能因连接断开而中断上传。解决方案是使您的上传能够抵御断开的连接。 Google云端存储使用名为Resumable Uploads的技术处理此问题。您需要使用此技术,以便您的应用程序可以从网络问题中恢复。

答案 2 :(得分:0)

在 Java SDK 中,我们可以选择更改连接超时并重试。

HttpTransportOptions transportOptions = StorageOptions.getDefaultHttpTransportOptions();
            transportOptions = transportOptions.toBuilder().setConnectTimeout(60000).setReadTimeout(60000)
                    .build();
var storage = StorageOptions.newBuilder()
    .setRetrySettings(RetrySettings.newBuilder().setMaxAttempts(2).build())
    .setTransportOptions(transportOptions)
    .setProjectId("project_id").build().getService();