对于上传到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上批量处理内容? 此时,我不确定服务器是否支持它。
答案 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。
是的,分块流媒体模式有效。