通过android上java中的http post分块上传文件

通过android上java中的http post分块上传文件,java,android,networking,Java,Android,Networking,我被要求使用http post发送一个文件。文件应以1 mb的块发送。我仔细阅读了这段代码,看起来我可以在我的案例中使用它。但是,我必须提供在URL中发送的块的起始字节作为参数。因此,我不知道如何完成它。我应该用新的url为每个区块实例化一个新连接吗?或者我可以使用stream方法,在将区块写入outputstream之前以某种方式更改url吗 这可以通过使用多方实体来实现。下面的代码将帮助您理解 final int cSize = 1024 * 1024; // size of chu

我被要求使用http post发送一个文件。文件应以1 mb的块发送。我仔细阅读了这段代码,看起来我可以在我的案例中使用它。但是,我必须提供在URL中发送的块的起始字节作为参数。因此,我不知道如何完成它。我应该用新的url为每个区块实例化一个新连接吗?或者我可以使用stream方法,在将区块写入outputstream之前以某种方式更改url吗

这可以通过使用多方实体来实现。下面的代码将帮助您理解

    final int cSize = 1024 * 1024; // size of chunk
    File file = new File("path to file");
    final long pieces = file.length()/cSize // used to return file length.

    HttpPost request = new HttpPost(endpoint);

    BufferedInputStream stream = new BufferedInputStream(new FileInputStream(file));

    for (int i= 0; i< pieces; i++) {
        byte[] buffer = new byte[cSize];

        if(stream.read(buffer) ==-1)
          break;

        MultipartEntity entity = new MultipartEntity();
        entity.addPart("chunk_id", new StringBody(String.valueOf(i))); //Chunk Id used for identification.
        request.setEntity(entity);
        ByteArrayInputStream arrayStream = new ByteArrayInputStream(buffer);

        entity.addPart("file_data", new InputStreamBody(arrayStream, filename));

        HttpClient client = app.getHttpClient();
        client.execute(request);
    }
final int cSize=1024*1024;//块大小
文件=新文件(“文件路径”);
final long pieces=file.length()/cSize//用于返回文件长度。
HttpPost请求=新的HttpPost(端点);
BufferedInputStream=新BufferedInputStream(新文件输入流(文件));
for(int i=0;i
只需使用
URL
HttpURLConnection
并调用
setChunkedTransferMode()


您不需要设置起始字节,除非您没有告诉我们。

chuncks是什么意思?是否在一个http连接期间完成所有操作?每个chunck有一个连接吗?你应该问问给你这个任务的人。@greenapps我在代码中添加了一些注释,以使它更清楚。
pieces=file.length()
应该是
pieces=file.length()/cSize<代码>流.跳过(i*cSize)。应删除该声明<代码>值(id)
。最好是
valueOf(i)流.read(缓冲区)您应该检查返回值<代码>片段
将不包括文件的最后一个片段,因此该片段将丢失。您完全错了。如果片段数等于file.length(),则for循环将执行file.length次。所以超过了几百万次。这就是你想要的吗?你显然从未测试过那个代码,天哪。为什么我要重复这些事情?我所说的都是真的。如果由于连接而导致崩溃,我们将如何从崩溃发生的最后一个地方恢复呢?我说的是简历控制。