示例#1
0
文件: Files.cs 项目: R1kNk/PGDrive
        /// <summary>
        /// Downloads a file from a drive
        /// </summary>
        /// <param name="fileId">Id of file</param>
        /// <returns>PGDriveResult with a FileDownloadResult which contains memory stream of downloaded file, mimeType
        /// and it's extension
        /// </returns>
        public PGDriveResult <FileDownloadResult> DownloadFile(string fileId)
        {
            PGDriveResult <FileDownloadResult> pGDriveResult = new PGDriveResult <FileDownloadResult>();

            try
            {
                var fileRequest = driveService.Files.Get(fileId);
                fileRequest.Fields = DefaultFileFieldsOnResponse;
                var fileResponse = fileRequest.Execute();
                if (fileResponse.MimeType.Contains("folder"))
                {
                    throw CustomExceptions.isAFolder(fileId, driveService);
                }
                var request = driveService.Files.Get(fileId);
                var stream  = new System.IO.MemoryStream();
                request.Download(stream);
                if (stream.Length != 0)
                {
                    string             mimeType           = fileResponse.MimeType;
                    string             ext                = GetDefaultExtension(mimeType);
                    FileDownloadResult fileDownloadResult = new FileDownloadResult(stream, mimeType, ext);
                    pGDriveResult.SetResponseBody(fileDownloadResult);
                }
                else
                {
                    pGDriveResult.SetResponseBody(null);
                    pGDriveResult.SetIsSuccess(false);
                }
                return(pGDriveResult);
            }
            catch (Google.GoogleApiException exception)
            {
                pGDriveResult.InitializeError(exception);
                return(pGDriveResult);
            }
        }