有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

OneDrive Business REST+Java上传大文件“setChunkedStreamingMode”是否有效?

对于上传到OneDrive Business的大型文件,我需要能够成批发送“内容”,否则会出现OutOfMemory错误

“setChunkedStreamingMode”方法有效吗
服务器正在返回状态代码500。 我没有成功地将批量内容发送到服务器。 下面是我正在使用的Java代码

private static void testChunkUpload()
{        
    String accessToken = "eJO...";  // I'm using a valid token

    try {
        String parentId = "01TOQ6QQ6KQBXXTKT4ABE3S6LDF4HE5PT5";
        String filename = "XYZ.txt";

        String fileContentString = "contents of the file.";
        byte[] fileContents = fileContentString.getBytes();

        StringBuilder dlBuilder = new StringBuilder();
        dlBuilder.append( "https://test-my.sharepoint.com/_api/v1.0/me" ) // I'm using the correct URL
                .append("/files/")
                .append(parentId)
                .append("/children/")
                .append(filename)
                .append("/content");

        URL uploadURL = new URL( dlBuilder.toString() );

        HttpURLConnection uploadConn = (HttpURLConnection)uploadURL.openConnection();

        uploadConn.setRequestMethod( "PUT" );
        uploadConn.setUseCaches(false);
        uploadConn.setDoOutput( true );         

        uploadConn.setRequestProperty("Authorization", "Bearer " + accessToken);  // this is right
        uploadConn.setRequestProperty("Content-Type", "text/html");

        uploadConn.setChunkedStreamingMode( 0 );
        try (OutputStream os = uploadConn.getOutputStream()) {
            os.write(fileContents);
            os.flush();
        }

        System.out.println(uploadConn.getResponseCode());

        uploadConn.disconnect();

    } catch (MalformedURLException ex) {
        Logger.getLogger(TestOneDrive.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(TestOneDrive.class.getName()).log(Level.SEVERE, null, ex);
    }
}

我尝试过各种各样的请求属性组合。 如果我不向输出流写入任何内容,我会在服务器上创建一个空文件,因此部分工作正常

是否有人成功地将内容批量发送到OneDrive for Business? 此时,我不确定服务器是否支持它


共 (2) 个答案

  1. # 1 楼答案

    将行setDoOutput(true)移动到setRequestMethod("PUT").之前

    否则,您将执行POST,而不是PUT

    是的,分块流模式很有效