当前位置: 首页 > 面试题库 >

如何从Android中的URL下载文件的一部分?

欧阳衡
2023-03-14
问题内容

我正在尝试使用setRequestProperty(“ Range”,“ bytes =” + startbytes +“-” +
endbytes);给定下载URL来下载文件的一部分。以下代码片段显示了我要执行的操作。

protected String doInBackground(String... aurl) {
    int count;
    Log.d(TAG,"Entered");
    try {

        URL url = new URL(aurl[0]);
        HttpURLConnection connection =(HttpURLConnection) url.openConnection();

        int lengthOfFile = connection.getContentLength();

        Log.d(TAG,"Length of file: "+ lengthOfFile);

        connection.setRequestProperty("Range", "bytes=" + 0 + "-" + 1000);

问题是,正在引发一个异常,该异常表示“建立连接后无法设置请求属性”。请帮助我解决此问题。


问题答案:

假设您正在使用HTTP进行下载,则需要使用HEAD http动词和RANGE http标头。

HEAD将为您提供文件大小(如果可用),然后RANGE可让您下载字节范围。

有了文件大小后,将其分成大小大致相等的块,并为每个块生成下载线程。完成所有操作后,以正确的顺序写入文件块。

如果您不知道如何使用RANGE标头,这里是另一个SO答案,说明了如何:http://codingdict.com/questions/131429

[编辑]

为了使文件成块,请使用它并开始下载过程,

private void getBytesFromFile(File file) throws IOException {
    FileInputStream is = new FileInputStream(file); //videorecorder stores video to file

    java.nio.channels.FileChannel fc = is.getChannel();
    java.nio.ByteBuffer bb = java.nio.ByteBuffer.allocate(10000);

    int chunkCount = 0;

    byte[] bytes;

    while(fc.read(bb) >= 0){
        bb.flip();
        //save the part of the file into a chunk
        bytes = bb.array();
        storeByteArrayToFile(bytes, mRecordingFile + "." + chunkCount);//mRecordingFile is the (String)path to file
        chunkCount++;
        bb.clear();
    }
}

private void storeByteArrayToFile(byte[] bytesToSave, String path) throws IOException {
    FileOutputStream fOut = new FileOutputStream(path);
    try {
        fOut.write(bytesToSave);
    }
    catch (Exception ex) {
        Log.e("ERROR", ex.getMessage());
    }
    finally {
        fOut.close();
    }
}


 类似资料:
  • 问题内容: 我正在制作一个将从URL下载文件的程序。总会开始下载,但未完成。例如,如果文件大小为3 MB,则程序仅下载文件大小的一半,因此我无法打开下载的文件。但是程序说文件成功下载了。 那么我该如何解决呢?应该使用其他方式下载吗? 问题答案: 您由于 您正在阅读两次,只写一次。 您需要做的是 这是您的完整代码

  • 问题内容: 我正在使用以下Java代码从Internet下载文件: 我想知道是否可以下载文件的一部分。例如,对于5MB的文件,下载最后2MB。 问题答案: 如果服务器支持(并且HTTP 1.1服务器 应支持 ),则可以使用范围请求: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35 此外,一次读取一个字符的效率非常低-您

  • 我的python3代码: 它将内容保存在metadat.pdf但那不是pdf的真正内容,它是这个html页面: 任何帮助,我如何才能保存文件的真实内容,而不是这个html?它应该是真正的pdf,当我下载它是jsut这个html页面 更新: 当我使用Python会话时,从服务器的一个NSWER:

  • 我们可以使用公共可下载的url来达到上述目的吗 谢谢

  • 编辑 当我在模拟器中运行这段代码时,代码仍然不能工作-文件没有下载。

  • 我正试图从一个网站下载多个word文档到一个我可以反复浏览的文件夹中。它们托管在sharepoint列表中,我已经能够解析HTML代码来编译这些word文档的所有链接列表。这些链接(单击时)会提示您打开或保存word文档。在这些链接的末尾,还有doc这个词的标题。我已经能够拆分URL字符串,以获得与我的URL列表对齐的word文档的名称列表。我的目标是编写一个循环,遍历所有URL并将所有word文