我正在使用官方的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 响应。
那么,出了什么问题?
答案 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);