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

时间:2015-04-10 17:13:56

标签: java onedrive

对于上传到OneDrive Business的大型文件,我需要能够以块的形式发送“内容”,否则我会收到OutOfMemoryError。

'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 个答案:

答案 0 :(得分:0)

API支持批量请求,但它看起来不支持chunked。您可能需要查看https://msdn.microsoft.com/EN-US/library/office/dn903506%28v=office.15%29.aspx以获取有关使用API​​进行批量请求的更多信息。我希望有所帮助。

答案 1 :(得分:0)

setDoOutput(true)

之前移动setRequestMethod("PUT").

否则你将执行POST,而不是PUT。

是的,分块流媒体模式有效。