在 C# 中使用 Dropbox Api 读取大文件和分块上传
Read big files and chunk upload with Dropbox Api in c#
我有很大的 sql 备份,我想将它们保存在保管箱中,但我只想将副本发送到保管箱并将文件移动到外部硬盘,因为我的服务器硬盘 space.
我正在尝试使用 dropbox api 的块上传,这是他们提供的示例代码。
private async Task ChunkUpload(DropboxClient client, string folder, string fileName)
{
Console.WriteLine("Chunk upload file...");
// Chunk size is 128KB.
const int chunkSize = 128 * 1024;
// Create a random file of 1MB in size.
var fileContent = new byte[1024 * 1024];
new Random().NextBytes(fileContent);
using (var stream = new MemoryStream(fileContent))
{
int numChunks = (int)Math.Ceiling((double)stream.Length / chunkSize);
byte[] buffer = new byte[chunkSize];
string sessionId = null;
for (var idx = 0; idx < numChunks; idx++)
{
Console.WriteLine("Start uploading chunk {0}", idx);
var byteRead = stream.Read(buffer, 0, chunkSize);
using (MemoryStream memStream = new MemoryStream(buffer, 0, byteRead))
{
if (idx == 0)
{
var result = await client.Files.UploadSessionStartAsync(memStream);
sessionId = result.SessionId;
}
else
{
UploadSessionCursor cursor = new UploadSessionCursor(sessionId, (ulong)(chunkSize * idx));
if (idx == numChunks - 1)
{
await client.Files.UploadSessionFinishAsync(cursor, new CommitInfo(folder + "/" + fileName), memStream);
}
else
{
await client.Files.UploadSessionAppendAsync(cursor, memStream);
}
}
}
}
}
}
我有文件路径,我想分块上传我的大文件,但就是无法让这个示例代码与文件的发送路径一起工作。我对块读取的修改不起作用,我在谷歌上搜索了 2 周。最后想问一下这个
我如何制作此方法,以处理发送文件路径,并从该大文件进行分块上传?
从现在开始感谢。
示例使用随机字节。
注释 random
流的代码并在 using
语句中包含您的文件流。在 localContentFullPath
中包含包含文件名和扩展名的完整路径,并在 DropBox 中分隔文件列表显示的 filename
。
public async Task ChunkUpload(DropboxClient client, string folder, string localContentFullPath)
{
Console.WriteLine("Chunk upload file...");
// Chunk size is 128KB.
const int chunkSize = 128 * 1024;
// Create a random file of 1MB in size.
// var fileContent = new byte[1024 * 1024];
// new Random().NextBytes(fileContent);
//using (var stream = new MemoryStream(fileContent))
var filename = System.IO.Path.GetFileName(localContentFullPath.ToString());
using (var stream = new FileStream(localContentFullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
...
我有很大的 sql 备份,我想将它们保存在保管箱中,但我只想将副本发送到保管箱并将文件移动到外部硬盘,因为我的服务器硬盘 space.
我正在尝试使用 dropbox api 的块上传,这是他们提供的示例代码。
private async Task ChunkUpload(DropboxClient client, string folder, string fileName)
{
Console.WriteLine("Chunk upload file...");
// Chunk size is 128KB.
const int chunkSize = 128 * 1024;
// Create a random file of 1MB in size.
var fileContent = new byte[1024 * 1024];
new Random().NextBytes(fileContent);
using (var stream = new MemoryStream(fileContent))
{
int numChunks = (int)Math.Ceiling((double)stream.Length / chunkSize);
byte[] buffer = new byte[chunkSize];
string sessionId = null;
for (var idx = 0; idx < numChunks; idx++)
{
Console.WriteLine("Start uploading chunk {0}", idx);
var byteRead = stream.Read(buffer, 0, chunkSize);
using (MemoryStream memStream = new MemoryStream(buffer, 0, byteRead))
{
if (idx == 0)
{
var result = await client.Files.UploadSessionStartAsync(memStream);
sessionId = result.SessionId;
}
else
{
UploadSessionCursor cursor = new UploadSessionCursor(sessionId, (ulong)(chunkSize * idx));
if (idx == numChunks - 1)
{
await client.Files.UploadSessionFinishAsync(cursor, new CommitInfo(folder + "/" + fileName), memStream);
}
else
{
await client.Files.UploadSessionAppendAsync(cursor, memStream);
}
}
}
}
}
}
我有文件路径,我想分块上传我的大文件,但就是无法让这个示例代码与文件的发送路径一起工作。我对块读取的修改不起作用,我在谷歌上搜索了 2 周。最后想问一下这个
我如何制作此方法,以处理发送文件路径,并从该大文件进行分块上传?
从现在开始感谢。
示例使用随机字节。
注释 random
流的代码并在 using
语句中包含您的文件流。在 localContentFullPath
中包含包含文件名和扩展名的完整路径,并在 DropBox 中分隔文件列表显示的 filename
。
public async Task ChunkUpload(DropboxClient client, string folder, string localContentFullPath)
{
Console.WriteLine("Chunk upload file...");
// Chunk size is 128KB.
const int chunkSize = 128 * 1024;
// Create a random file of 1MB in size.
// var fileContent = new byte[1024 * 1024];
// new Random().NextBytes(fileContent);
//using (var stream = new MemoryStream(fileContent))
var filename = System.IO.Path.GetFileName(localContentFullPath.ToString());
using (var stream = new FileStream(localContentFullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
...