下载较大尺寸(如30Mb)的pdf文件失败

时间:2016-11-13 05:00:22

标签: codenameone

我在下载pdf文件时使用了CN1CircleProgress库。如果pdf文件很小,它的效果很好。但是对于较大的pdf文件,例如30 Mb,圆圈填充到100%非常快2-3次,然后又开始下载到20-30%&下载停止。下载的文件已损坏&无法在pdf查看器中打开。我在iOS&中检查了它Android设备。在模拟器中,它只下载到某个百分比,然后停止

downloadPdfButton.addActionListener((e) -> {
    pdfUrlSelected = "http://roundtablenepal.org.np/uploadEpubs/57cbcc4e76258.pdf";
    pdfFileNameIdSelected = currentPdfSelected.get("magazine_title");

    filename = dir + sep;
    filename = filename + pdfFileNameIdSelected + ".pdf";
    FileSystemStorage.getInstance().mkdir(dir);
    Slider downloadSlider = new Slider();
    if (!FileSystemStorage.getInstance().exists(filename)) {
        downloadPdfFromUrl(f, pdfUrlSelected, filename, true, downloadSlider, findCancelDownload(f));
    }
});

private boolean downloadPdfFromUrl(Form f, String url, final String fileName, boolean storage, final Slider slider, Button cancel) {
    crPdf = new ConnectionRequest();
    crPdf.resume();
    crPdf.setPost(false);
    crPdf.setDuplicateSupported(true);
    crPdf.setFailSilently(true);
    crPdf.setUrl(url);
    crPdf.setTimeout(15000);
    crPdf.setDestinationFile(fileName);

    final CircleFilledProgress p = new CircleFilledProgress();
    p.setProgress(0);


    f.add(BorderLayout.CENTER, p);

    NetworkManager.getInstance().addProgressListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            if (evt instanceof NetworkEvent) {
                NetworkEvent e = (NetworkEvent) evt;
                if (e.getProgressPercentage() >= 0) {
                    slider.setText(e.getProgressPercentage() + "%");
                    slider.setProgress(e.getProgressPercentage());
                }
            }
        }
    });

    slider.addDataChangedListener(new DataChangedListener() {

        @Override
        public void dataChanged(int type, int index) {
            p.setProgress(index);
        }
    });

    NetworkManager.getInstance().addToQueueAndWait(crPdf);

    cancel.addActionListener((e) -> {
        crPdf.kill();
    });

    return crPdf.getResponseCode() == 200;
}

1 个答案:

答案 0 :(得分:0)

我建议打开网络监视器,我猜你正在获得一个更新进度的重定向,然后由于某种原因重定向会导致错误页面。