使用以下代码,我可以从url加载任何文件作为字节 但这种方式适用于不大于256kb的文件。
所以我想用另一种方法将较大的文件作为字节加载而不使用BlackBerry Combiner
我的代码:
HttpConnection hpc = null;
try {
hpc = (HttpConnection) Connector.open(url
+ ConnectionManager.getTimeOut(5000)
+ ConnectionManager.updateConnectionSuffix());
hpc.setRequestMethod(HttpConnection.GET);
hpc.setRequestProperty("Connection", "Keep-Alive");
if (hpc.getResponseCode() != 200) {
return null;
}
byte[] data = IOUtilities.streamToBytes(hpc.openInputStream());
hpc.close();
return data;
} catch (Exception e) {
return null;
}
答案 0 :(得分:1)
MDS是限制,它是BlackBerry设备和互联网之间的代理。 BIS和BES服务器都是MDS。因此,在不删除限制的情况下,您必须拆分下载以适应最大数据量的每个下载。 HTTP协议已通过Range请求标头支持此功能,如DownloadCombiner示例中所示,无需创建自己的机制。 这是保证下载任意大小文件的唯一方法。
那就是说,根据你的情况,有一些方法可以消除/绕过限制:
如果您的设备位于BES内,您可以与BES管理员联系,以尽可能增加每个连接的下载数据大小。 BES配置中的最大可用值取决于BES版本,因此即使最大可能也不足以下载超过该限制的文件。 (但是如果你的文件小于限制,那么这是在不修改代码的情况下下载文件的最快方法)。
如果您在本地计算机的模拟器中进行测试,请查找此文件:
<JDE path>\MDS\config\rimpublic.property<br><br>
找到行IPPP.connection.MaxNumberOfKBytesToSend
并增加它以满足您的需求。这不是一个好习惯,因为您的应用程序在模拟器中运行良好,但在真实设备上会失败。始终希望让您的模拟器行为尽可能接近真实设备。
如果您超过BIS,那么限制是固定的,并且会根据HTTP响应中返回的MIME类型而有所不同,如here所述。多媒体MIME类型的最大大小限制为122,880 KB。因此,如果您需要从您控制的服务器下载大小超过2048 KB的pdf文件,您可以破解,将文件重命名为多媒体扩展,将响应中返回的MIME类型更改为多媒体扩展名,然后在您的设备中下载后,再次重命名为其原始扩展名。如果托管文件的服务器不在您的控制之下,您可以在其间设置代理服务器以下载它并将欺骗文件提供给设备。这是一项太多的工作,你可以看到,使用DownloadCombiner更快。您仍然必须解决了解原始文件真实扩展的问题。最后你会遇到122,880 KB,因此它不适用于超过这个大小的文件。
答案 1 :(得分:0)
我试图调整BlackBerry Combiner 使用它下载大文件作为字节。它对我来说很好 下面列出的代码
---致电
byte[] data = downloadLargeFiles(url);
if (data != null) {
invoke(data.length + " ");
Bitmap bitmap = Bitmap.createBitmapFromBytes(data, 0,
data.length, 1);
manager.add(new BitmapField(bitmap));
}
---功能
public byte[] downloadLargeFiles(String url) throws Exception {
int chunkIndex = 0;
int totalSize = 0;
String currentFile = url + ConnectionManager.getTimeOut(5000)
+ ConnectionManager.updateConnectionSuffix();
HttpConnection conn;
InputStream in;
int rangeStart = 0;
int rangeEnd = 0;
int chunksize = 100000;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while (true) {
conn = (HttpConnection) Connector.open(currentFile,
Connector.READ_WRITE, true);
rangeStart = chunkIndex * chunksize;
rangeEnd = rangeStart + chunksize - 1;
conn.setRequestProperty("Range", "bytes=" + rangeStart + "-"
+ rangeEnd);
int responseCode = conn.getResponseCode();
if (responseCode != 200 && responseCode != 206) {
// Dialog.alert("End "+responseCode);
break;
}
in = conn.openInputStream();
int length = -1;
byte[] readBlock = new byte[256];
int fileSize = 0;
while ((length = in.read(readBlock)) != -1) {
bos.write(readBlock, 0, length);
fileSize += length;
Thread.yield(); // Try not to get cut off
}
totalSize += fileSize;
chunkIndex++; // index (range) increase
in.close();
conn.close();
in = null;
conn = null;
Thread.sleep(1000);
}
bos.close();
return bos.toByteArray();
}
谢谢