让百度网盘支持大文件上传(续)
在让百度网盘支持大文件上传中提到,百度PCS提供了两种上传方式的REST API,一种是普通上传方式,另一种是分片上传。由于官方文档上写了“普通上传方式只支持最大2GB的文件”,于是选择了分片上传API,这样就很好的解决了大文件上传受限的问题。
其实官方文档上还有第三种上传方式: 秒传,但当时想当然的认为这种上传方式肯定也只支持单文件2GB大小,于是就没有考虑它。
就在刚才,好奇的试了一下秒传API,并还是用超过4GB的系统安装文件进行上传测试,结果成功了!!
于是就改进了之前写的代码,添加了秒传接口,接口详情见官方文档。
秒传其实就是上传前先计算文件md5,然后与百度云上已经存在的文件的md5值进行比较,如果存在,则不用重复上传;但如果百度云上没有该文件,那么还是需要用分片上传方式。
解决方式:
private void Upload()
{
uploadButton.Enabled = false;
for (int i = 0; i < files.Count;++i )
{
string file = files[i];
progressBar.Value = 0;
progressBar.Maximum = 100;
statusLabel.Text = "computing……";
bpcs.progressEvent = new BPCS.ProgressEventHander(Progress);
//先尝试利用秒传
//如果上传失败,很有可能是百度云上没有找到相同的文件
//这个时候用普通方式上传
bool ok = bpcs.RapidUpload(file);
if(!ok)
{
//普通方式上传
statusLabel.Text = "0%";
ok = bpcs.Upload(file);
}
if (!ok)
MessageBox.Show(string.Format("{0} upload failed", System.IO.Path.GetFileName(file)));
DeleteListItem(file);
}
files.Clear();
uploadButton.Enabled = true;
}
下载
项目地址:https://github.com/bo-huang/bpcs