为什么Dropbox服务器在尝试通过其API上传文件时没有响应?

时间:2011-12-14 14:20:46

标签: java dropbox

我正在使用官方的Dropbox API for Java。 到目前为止,一切顺利。通过oauth进行身份验证以及其他功能(如目录列表)也是如此。

现在,我尝试上传这样的文件:

InputStream is = getInputStream();
byte[] bytes = is2Bytes(is); // Gets all bytes "behind" the stream
int len = bytes.length;
api.putFileOverwrite(path, is, len, null);

现在,当我执行此调用时,我的应用程序会挂起大约15秒,然后我会抛出Dropbox服务器没有响应的异常。

所以,首先我问Dropbox支持他们的服务器是否有问题。没有。

然后,我玩了putFileOverwrite方法的参数,我发现如果我手动设置len = 0,服务器会响应并创建一个具有正确文件名的0字节文件。

作为另一个测试,我手动输入值len = 100(原始文件有250KB,所以应该没问题)。同样,服务器执行 NOT 响应。

那么,出了什么问题?

2 个答案:

答案 0 :(得分:3)

这根本不奇怪。由于您使用自制方法is2Bytes,因此蒸汽是空的,因为您读取所有字节来计算它们。这样做的正确方法是知道要发送多少字节或使用内置方法发送文件。

public HttpResponse putFile(String root, String dbPath, File localFile)

答案 1 :(得分:0)

非常奇怪。我能够通过从字节数组重新创建一个新的InputStream并将其发送到Dropbox来解决这个问题:

InputStream is = getInputStream();
byte[] bytes = is2Bytes(is); // Gets all bytes "behind" the stream
int len = bytes.length;
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
api.putFileOverwrite(path, bis, len, null);