2011-12-14 37 views
0

我使用官方的Dropbox API for Java。到目前为止,一切顺利。通过oauth进行身份验证的工作以及其他功能(如目录列表)也是如此。现在为什么Dropbox服务器在尝试通过API上传文件时没有响应?

,我试图上传这样的文件:

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,所以应该没问题)。同样,服务器确实不响应而不是

那么,怎么了?

回答

3

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

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

我看,谢谢你的提示。阅读后不知道该流是“空的”。 – Timo 2011-12-14 16:25:32

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); 
相关问题