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? 此时,我不确定服务器是否支持它
# 1 楼答案
将行
setDoOutput(true)
移动到setRequestMethod("PUT").
之前否则,您将执行POST,而不是PUT
是的,分块流模式很有效
# 2 楼答案
API支持批处理请求,但看起来不支持分块。您可能想查看https://msdn.microsoft.com/EN-US/library/office/dn903506%28v=office.15%29.aspx,以了解有关使用API进行批处理请求的更多信息。我希望这能有所帮助