2

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

问题出在一个简单的 java 类的 main 方法中。

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)
......
4

3 回答 3

1

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

于 2013-09-06T18:34:52.047 回答
1

对于较大的文件,尤其是在移动设备和无线连接上,您的上传更有可能因连接中断而中断。解决方案是让您的上传能够抵御断开的连接。Google Cloud Storage 使用一种称为Resumable Uploads的技术来处理这个问题。您需要使用此技术,以便您的应用程序可以从网络问题中恢复。

于 2013-10-28T22:39:14.557 回答
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();
于 2021-01-12T13:20:12.223 回答