从Google Drive下载损坏的文件
问题描述:
我在下载过程中遇到问题,它下载,但下载的文件是相同的字节大小:108102字节;无论实际文件是小于还是大于此值。从Google Drive下载损坏的文件
我可以成功上传PDF文件并设置其权限,以便任何人通过链接https://drive.google.com/open?id=UNIQUE_ID_HERE
查看。下面是我用它来下载文件异步功能:
/// <summary>Downloads the media from the given URL.</summary>
private async Task DownloadFile(DriveService service, string url)
{
var downloader = new MediaDownloader(service);
downloader.ChunkSize = DownloadChunkSize;
// add a delegate for the progress changed event for writing to console on changes
downloader.ProgressChanged += Download_ProgressChanged;
var fileName = DownloadDirectoryName + @"\cover_new.pdf";
Console.WriteLine("Downloading file from link: {0}", url);
using (var fileStream = new System.IO.FileStream(fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write))
{
var progress = await downloader.DownloadAsync(url, fileStream);
if (progress.Status == DownloadStatus.Completed)
{
Console.WriteLine(fileName + " was downloaded successfully: " + progress.BytesDownloaded);
}
else
{
Console.WriteLine("Download {0} was interrupted in the middle. Only {1} were downloaded. ", fileName, progress.BytesDownloaded);
}
}
}
而且,我能够使用链接成功地从不同的浏览器中打开该文件,而无需输入任何凭据。
答
我错误地尝试使用URL下载文件:https://drive.google.com/open?id=UNIQUE_ID_HERE
。
- 第二个参数,
url
,现在是一个file
对象:改变我对我的方法做。我传递的是URL,但是我应该使用
service.Files.Get()
并使用它的Id来获取文件。 - 为了清晰起见,将第二个参数重命名为fileToDownload。
- 因为我现在有一个文件对象
downloadfile
我想下载的文件,我可以调用它的DownloadAsync
方法,发送它已经有的文件流。
新的代码如下:
private async Task DownloadFile(DriveService service, Google.Apis.Drive.v3.Data.File fileToDownload)
{
var downloader = new MediaDownloader(service);
downloader.ChunkSize = DownloadChunkSize;
// add a delegate for the progress changed event for writing to console on changes
downloader.ProgressChanged += Download_ProgressChanged;
var fileName = DownloadDirectoryName + @"\cover_new.pdf";
var downloadfile = service.Files.Get(fileToDownload.Id);
Console.WriteLine("Downloading file with id: {0}", fileToDownload);
using (var fileStream = new System.IO.FileStream(fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write))
{
var progress = await downloadfile.DownloadAsync(fileStream);
if (progress.Status == DownloadStatus.Completed)
{
Console.WriteLine(fileName + " was downloaded successfully: " + progress.BytesDownloaded);
}
else
{
Console.WriteLine("Download {0} was interrupted in the middle. Only {1} were downloaded. ", fileName, progress.BytesDownloaded);
}
}
}
我希望这可以帮助一个人在那里。
+1
很高兴你解决了它,并感谢分享解决方案。 – Phylyp
您是否尝试过查看在文本编辑器中下载的文件内容。我怀疑这是一个显示错误消息或某种登录屏幕方式的HTML页面。 – Phylyp
@Phylyp,我在Notepad ++中打开了所有内容,它都是html/javascript,但是我没有看到任何拒绝访问错误或类似的东西。我认为这可能是一个登录,但我不能肯定地说。我用'.html'扩展名重命名了文件,但我无法在浏览器中打开它,它加载了一个空白页面,当我查看它时,源代码都在那里。 –
@Phylyp,。我想第一个问题应该是我是否使用正确的URL下载。 DownloadAsync方法需要url作为第一个参数。 –