Exemple #1
0
        public async Task <bool> UploadToGoogleCloudStorage(string bucketName, string token, string filePath, string contentType)
        {
            var newObject = new Google.Apis.Storage.v1.Data.Object()
            {
                Bucket = bucketName,
                Name   = System.IO.Path.GetFileNameWithoutExtension(filePath)
            };
            var service = new Google.Apis.Storage.v1.StorageService();

            try
            {
                using (var fileStream = new FileStream(filePath, FileMode.Open))
                {
                    var uploadRequest = new ObjectsResource.InsertMediaUpload(service, newObject, bucketName, fileStream, contentType);
                    uploadRequest.OauthToken       = token;
                    uploadRequest.ProgressChanged += UploadProgress;
                    uploadRequest.ChunkSize        = (256 * 1024);
                    await uploadRequest.UploadAsync().ConfigureAwait(false);

                    service.Dispose();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                throw ex;
            }
            return(true);
        }
Exemple #2
0
        /// <summary>
        /// Uploads a local file to Google Cloud storage, overwriting any existing object and clobber existing metadata
        /// values.
        /// </summary>
        protected Object UploadGcsObject(
            StorageService service, string bucket, string objectName,
            Stream contentStream, string contentType,
            PredefinedAclEnum?predefinedAcl, Dictionary <string, string> metadata)
        {
            // Work around an API wart. It is possible to specify content type via the API and also by
            // metadata.
            if (metadata != null && metadata.ContainsKey("Content-Type"))
            {
                metadata["Content-Type"] = contentType;
            }

            Object newGcsObject = new Object
            {
                Bucket      = bucket,
                Name        = objectName,
                ContentType = contentType,
                Metadata    = metadata
            };

            ObjectsResource.InsertMediaUpload insertReq = service.Objects.Insert(
                newGcsObject, bucket, contentStream, contentType);
            insertReq.PredefinedAcl = predefinedAcl;
            insertReq.Projection    = ProjectionEnum.Full;

            var finalProgress = insertReq.Upload();

            if (finalProgress.Exception != null)
            {
                throw finalProgress.Exception;
            }

            return(insertReq.ResponseBody);
        }
Exemple #3
0
        /// <summary>
        /// Clears the content of an object. Used by Clear-Content.
        /// </summary>
        /// <param name="path">The path of the object to clear.</param>
        public void ClearContent(string path)
        {
            if (!ShouldProcess(path, "Clear-Content"))
            {
                return;
            }
            var    gcsPath = GcsPath.Parse(path);
            Object body    = new Object
            {
                Name   = gcsPath.ObjectPath,
                Bucket = gcsPath.Bucket
            };
            var memoryStream = new MemoryStream();
            var contentType  = GcsCmdlet.UTF8TextMimeType;

            ObjectsResource.InsertMediaUpload request =
                Service.Objects.Insert(body, gcsPath.Bucket, memoryStream, contentType);
            IUploadProgress response = request.Upload();

            if (response.Exception != null)
            {
                throw response.Exception;
            }
            TelemetryReporter.ReportSuccess(nameof(GoogleCloudStorageProvider), nameof(ClearContent));
        }
        protected virtual ObjectsResource.InsertMediaUpload PrepareUploadRequest(string bucketName, string fileName, Stream fileStream, Action <IUploadProgress> onProgresChanged = null, Action <Object> success = null, Access access = Access.Public, string mimeType = null)
        {
            var newObject = new Object()
            {
                Bucket = bucketName,
                Name   = fileName,
            };

            mimeType = mimeType ?? MimeMapping.GetMimeMapping(fileName);

            var uploadRequest = new ObjectsResource.InsertMediaUpload(Service, newObject, bucketName, fileStream,
                                                                      mimeType);

            uploadRequest.OauthToken    = AccessToken;
            uploadRequest.PredefinedAcl = access.ForUpload();

            if (onProgresChanged != null)
            {
                uploadRequest.ProgressChanged += onProgresChanged;
            }

            if (success != null)
            {
                uploadRequest.ResponseReceived += success;
            }

            return(uploadRequest);
        }
Exemple #5
0
        public UploadResult UploadFile(IFormFile file, string fileName, bool encryption, bool compressing)
        {
            var newObject = new Google.Apis.Storage.v1.Data.Object()
            {
                Bucket = BucketToUpload,
                Name   = fileName
            };
            string encryptionKey = null, iv = null;

            // Actions with data here encrypting / compressing

            var fileStream = file.OpenReadStream();
            var fileBytes  = ReadToEnd(fileStream);

            #region Encryption and compressing
            if (compressing)
            {
                fileBytes = Compress(fileBytes);
            }
            if (encryption)
            {
                var actionData = GenerateKeyAndIV(FileActionsConstants.AESFlavour);
                fileBytes     = Encrypt(fileBytes, actionData.Item1, actionData.Item2);
                encryptionKey = Convert.ToBase64String(actionData.Item1);
                iv            = Convert.ToBase64String(actionData.Item2);
            }
            #endregion


            Stream fileOutStream = new MemoryStream(fileBytes);
            try
            {
                var uploadRequest = new ObjectsResource.InsertMediaUpload(StorageService, newObject,
                                                                          BucketToUpload, fileOutStream, encryption || compressing ? "application/octet-stream" : file.ContentType);



                var res = uploadRequest.Upload();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return(new UploadResult {
                    Success = false
                });
            }
            finally
            {
                if (fileStream != null)
                {
                    fileStream.Dispose();
                }
            }
            return(new UploadResult(true, encryptionKey, iv));
        }
Exemple #6
0
        /// <summary>
        /// Gets a writer used to upload data to a Google Cloud Storage object. Used by Set-Content.
        /// </summary>
        /// <param name="path">The path of the object to upload to.</param>
        /// <returns>The writer.</returns>
        public IContentWriter GetContentWriter(string path)
        {
            var    gcsPath = GcsPath.Parse(path);
            Object body    = new Object
            {
                Name   = gcsPath.ObjectPath,
                Bucket = gcsPath.Bucket
            };
            var inputStream  = new AnonymousPipeServerStream(PipeDirection.Out);
            var outputStream = new AnonymousPipeClientStream(PipeDirection.In, inputStream.ClientSafePipeHandle);
            var contentType  = ((GcsGetContentWriterDynamicParameters)DynamicParameters).ContentType ?? GcsCmdlet.UTF8TextMimeType;

            ObjectsResource.InsertMediaUpload request =
                Service.Objects.Insert(body, gcsPath.Bucket, outputStream, contentType);
            request.UploadAsync();
            IContentWriter contentWriter = new GcsContentWriter(inputStream);

            // Force the bucket models to refresh with the potentially new object.
            BucketModels.Clear();
            TelemetryReporter.ReportSuccess(nameof(GoogleCloudStorageProvider), nameof(GetContentWriter));
            return(contentWriter);
        }
        // To upload the file:
        public async Task UploadAsync(string bucketName, string filename)
        {
            Google.Apis.Storage.v1.Data.Object blob          = null;
            ObjectsResource.InsertMediaUpload  uploadRequest = null;

            blob        = new Google.Apis.Storage.v1.Data.Object();
            blob.Bucket = bucketName;
            blob.Name   = "keyName";

            using (var fileStream = new FileStream(filename, FileMode.Open))
            {
                uploadRequest            = new ObjectsResource.InsertMediaUpload(_storageService, blob, bucketName, fileStream, "text/plain");
                uploadRequest.OauthToken = _userCredential.Token.AccessToken;
                await uploadRequest.UploadAsync();
            }

            // This was in comments - to get status of upload
            //    var response = mediaInsertUpload.Upload();
            //    string status = response.Status.ToString();

            // Remember to refresh the tokens if you do lot of operations and before you go to the next batch.
        }
Exemple #8
0
        private Object NewObject(GcsPath gcsPath, NewGcsObjectDynamicParameters dynamicParameters, Stream contentStream)
        {
            Object newGcsObject = new Object
            {
                Bucket      = gcsPath.Bucket,
                Name        = gcsPath.ObjectPath,
                ContentType = dynamicParameters.ContentType
            };

            ObjectsResource.InsertMediaUpload insertReq = Service.Objects.Insert(
                newGcsObject, newGcsObject.Bucket, contentStream, newGcsObject.ContentType);
            insertReq.PredefinedAcl = dynamicParameters.PredefinedAcl;
            insertReq.Projection    = ObjectsResource.InsertMediaUpload.ProjectionEnum.Full;

            IUploadProgress finalProgress = insertReq.Upload();

            if (finalProgress.Exception != null)
            {
                throw finalProgress.Exception;
            }

            return(insertReq.ResponseBody);
        }
Exemple #9
0
            internal UploadHelper(
                StorageClient client,
                Object destination,
                Stream source,
                UploadObjectOptions options,
                IProgress <IUploadProgress> progress)
            {
                _client      = client;
                _mediaUpload = client.CreateObjectUploader(destination, source, options);
                if (progress != null)
                {
                    _mediaUpload.ProgressChanged += progress.Report;
                }

                var validationMode = options?.UploadValidationMode ?? UploadObjectOptions.DefaultValidationMode;

                GaxPreconditions.CheckEnumValue(validationMode, nameof(UploadObjectOptions.UploadValidationMode));
                switch (validationMode)
                {
                case UploadValidationMode.DeleteAndThrow:
                    _crc = new Crc32c();
                    _mediaUpload.UploadStreamInterceptor += _crc.UpdateHash;
                    _validationFailureAction              = obj => client.DeleteObject(obj, new DeleteObjectOptions {
                        Generation = obj.Generation
                    });
                    _validationFailureAsyncAction = (obj, token) => client.DeleteObjectAsync(obj, new DeleteObjectOptions {
                        Generation = obj.Generation
                    }, token);
                    break;

                case UploadValidationMode.ThrowOnly:
                    _crc = new Crc32c();
                    _mediaUpload.UploadStreamInterceptor += _crc.UpdateHash;
                    break;
                }
            }
        public static async Task <string> UploadDocument(string folderName, IFormFile filedata, string fileName, string ext, JObject googleCredentialPathFile1, GoogleCredentialModel googleCredential)
        {
            string exten = Path.GetExtension(fileName).ToLower();
            string bucketFolderWithFilePath = string.Empty;

            Console.WriteLine("---------------------GCBUCKET ----------------code");
            ProjectProposalDetail model = new ProjectProposalDetail();
            var            scopes       = new[] { @"https://www.googleapis.com/auth/cloud-platform" };
            var            cts          = new CancellationTokenSource();
            StorageService service      = new StorageService();
            UserCredential credential;
            ClientSecrets  secrets = new ClientSecrets();

            secrets.ClientId     = googleCredentialPathFile1["installed"]["client_id"].ToString();
            secrets.ClientSecret = googleCredentialPathFile1["installed"]["client_secret"].ToString();
            Console.WriteLine($"secrets");
            //var service = new StorageService();
            //UserCredential credential;
            //using (var stream = new FileStream(googleCredentialPathFile1, FileMode.Open, FileAccess.Read))
            //{
            credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                secrets,
                scopes,
                StaticResource.EmailId, CancellationToken.None);

            //}
            // Create the service.
            service = new StorageService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName       = StaticResource.ApplicationName,
            });

            var bucketsQuery = service.Buckets.List(StaticResource.ProjectId);

            bucketsQuery.OauthToken = credential.Token.AccessToken;
            var        buckets    = bucketsQuery.Execute();
            FileStream fileStream = null;

            try
            {
                ApiResponse response  = new ApiResponse();
                var         newObject = new Google.Apis.Storage.v1.Data.Object()
                {
                    Bucket = StaticResource.BucketName,
                    Name   = StaticResource.ProjectsFolderName + "/" + folderName + "/" + StaticResource.ProjectActivityFolderName + "/" + fileName
                };

                var mimetype = GetMimeType(ext);

                var uploadRequest = new ObjectsResource.InsertMediaUpload(service, newObject, StaticResource.BucketName, filedata.OpenReadStream(), mimetype);
                var fileResponse  = uploadRequest.Upload();
                Console.WriteLine($"File upload on bucket status: {fileResponse.Status}");

                if (fileResponse.Status.ToString() == "Completed" && fileResponse.Exception == null)
                {
                    bucketFolderWithFilePath = newObject.Bucket + "/" + newObject.Name;
                }
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (fileStream != null)
                {
                    fileStream.Dispose();
                }
            }

            if (!string.IsNullOrEmpty(bucketFolderWithFilePath))
            {
                return(bucketFolderWithFilePath);
            }
            else
            {
                throw new Exception(StaticResource.UnableToUploadFile);
            }
        }
        //upload files
        public static async Task <ProjectProposalDetail> uploadOtherProposaldoc(string folderName, IFormFile filedata, string fileName, GoogleCredentialModel googleCredential, string EmailId, string logginUserEmailId, string ext, JObject googleCredentialPathFile, string ProposalType)
        {
            ProjectProposalModel res    = new ProjectProposalModel();
            string exten                = Path.GetExtension(fileName).ToLower();
            ProjectProposalDetail model = new ProjectProposalDetail();

            //there are different scopes, which you can find here https://cloud.google.com/storage/docs/authentication
            var scopes = new[] { @"https://www.googleapis.com/auth/cloud-platform" };
            var cts    = new CancellationTokenSource();

            ClientSecrets secrets = new ClientSecrets();

            secrets.ClientId     = googleCredentialPathFile["installed"]["client_id"].ToString();
            secrets.ClientSecret = googleCredentialPathFile["installed"]["client_secret"].ToString();

            UserCredential credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                secrets,
                scopes,
                StaticResource.EmailId, CancellationToken.None);

            // Create the service.
            StorageService service = new StorageService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName       = StaticResource.ApplicationName,
            });

            var bucketsQuery = service.Buckets.List(StaticResource.ProjectId);

            bucketsQuery.OauthToken = credential.Token.AccessToken;
            var buckets = bucketsQuery.Execute();

            FileStream fileStream = null;

            try
            {
                ApiResponse response  = new ApiResponse();
                var         newObject = new Google.Apis.Storage.v1.Data.Object()
                {
                    Bucket = StaticResource.BucketName,
                    Name   = StaticResource.ProjectsFolderName + "/" + folderName + "/" + fileName
                };
                var mimetype = GetMimeType(ext);

                var uploadRequest = new ObjectsResource.InsertMediaUpload(service, newObject, StaticResource.BucketName, filedata.OpenReadStream(), mimetype);
                uploadRequest.OauthToken = credential.Token.AccessToken;
                var fileResponse = uploadRequest.Upload();

                Console.WriteLine($"Other files response from bucket: {fileResponse}");

                var bucketFolderWithFilePath = newObject.Bucket + "/" + newObject.Name;
                if (fileResponse.Status.ToString() == "Completed" && fileResponse.Exception == null)
                {
                    if (ProposalType == "Proposal")
                    {
                        model.FolderName       = folderName;
                        model.ProposalFileName = fileName;
                        model.ProposalWebLink  = bucketFolderWithFilePath;
                        model.IsDeleted        = false;
                        model.CreatedDate      = DateTime.UtcNow;
                    }

                    if (ProposalType == "EOI")
                    {
                        model.FolderName     = folderName;
                        model.EDIFileName    = fileName;
                        model.EDIFileWebLink = bucketFolderWithFilePath;
                        model.EDIFileExtType = ext;
                        model.IsDeleted      = false;
                        model.ModifiedDate   = DateTime.UtcNow;
                    }
                    else if (ProposalType == "BUDGET")
                    {
                        model.FolderName        = folderName;
                        model.IsDeleted         = false;
                        model.BudgetFileName    = fileName;
                        model.BudgetFileWebLink = bucketFolderWithFilePath;
                        model.BudgetFileExtType = ext;
                        model.ModifiedDate      = DateTime.UtcNow;
                    }
                    else if (ProposalType == "CONCEPT")
                    {
                        model.FolderName         = folderName;
                        model.IsDeleted          = false;
                        model.ConceptFileName    = fileName;
                        model.ConceptFileWebLink = bucketFolderWithFilePath;
                        model.ConceptFileExtType = ext;
                        model.ModifiedDate       = DateTime.UtcNow;
                    }
                    else if (ProposalType == "PRESENTATION")
                    {
                        model.FolderName              = folderName;
                        model.IsDeleted               = false;
                        model.PresentationFileName    = fileName;
                        model.PresentationFileWebLink = bucketFolderWithFilePath;
                        model.PresentationExtType     = ext;
                        model.ModifiedDate            = DateTime.UtcNow;
                    }
                }
                else
                {
                    throw new Exception(StaticResource.UnableToUploadFile);
                }


                ////code to delete the file
                //ObjectsResource.ListRequest request = service.Objects.List(googleCredential.BucketName);
                //request.Delimiter = folderName + "/";

                ////request.Prefix = Delimiter;
                //var filePath = folderName + "/" + projectProposalfilename;
                //Google.Apis.Storage.v1.Data.Objects response1 = request.Execute();

                //foreach (var data in response1.Items)
                //{

                //    if (data != null && data.Name == filePath)
                //    {
                //        //delete the file in containing folder******

                //        ObjectsResource.DeleteRequest deleteRequest = null;

                //        deleteRequest = new ObjectsResource.DeleteRequest(service, googleCredential.BucketName, data.Name);
                //        deleteRequest.OauthToken = credential.Token.AccessToken;
                //        deleteRequest.Execute();
                //    }
                //    else
                //    {

                //    }
                //}
                //if (response1.Prefixes != null)
                //{
                //    // return
                //    var data = response;
                //}
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (fileStream != null)
                {
                    fileStream.Dispose();
                }
            }


            return(model);
        }
        public static async Task <ProjectProposalDetail> AuthExplicit(string filefullPath, string projectProposalfilename, JObject googleCredentialpathFile, string folderName, GoogleCredentialModel googleCredential, long Projectid, string userid)
        {
            ProjectProposalModel  res   = new ProjectProposalModel();
            ProjectProposalDetail model = new ProjectProposalDetail();

            //there are different scopes, which you can find here https://cloud.google.com/storage/docs/authentication

            //var scopes = new[] { @"https://www.googleapis.com/auth/cloud-platform" };
            var scopes = new[] { @"https://www.googleapis.com/auth/devstorage.full_control" };

            var cts = new CancellationTokenSource();

            StorageService service = new StorageService();
            ClientSecrets  secrets = new ClientSecrets();

            secrets.ClientId     = googleCredentialpathFile["installed"]["client_id"].ToString();
            secrets.ClientSecret = googleCredentialpathFile["installed"]["client_secret"].ToString();

            UserCredential credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                secrets,
                scopes,
                StaticResource.EmailId, CancellationToken.None);

            service = new StorageService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName       = StaticResource.ApplicationName,
            });

            var bucketsQuery = service.Buckets.List(StaticResource.ProjectId);

            bucketsQuery.OauthToken = credential.Token.AccessToken;
            var buckets = bucketsQuery.Execute();

            // create bucket first time

            //var newBucket = new Google.Apis.Storage.v1.Data.Bucket()
            //{
            //    Name = "clear-fusion"
            //};

            //var newBucketQuery = service.Buckets.Insert(newBucket, projectId);
            // newBucketQuery.OauthToken = userCredential.Result.Token.AccessToken;
            //you probably want to wrap this into try..catch block
            // newBucketQuery.Execute();


            //enter bucket name to which you want to upload file
            FileStream fileStream = null;

            try
            {
                ApiResponse response = new ApiResponse();
                Console.WriteLine("reading file path");

                var path = Directory.GetCurrentDirectory() + "/Documents/Proposal/Proposal.docx";
                Console.WriteLine($"File local  Path with environment variables : {path}");
                path = path.Replace(@"\", "/");
                Console.WriteLine($"convert File local Path in linux : {path}");

                var newObject = new Google.Apis.Storage.v1.Data.Object()
                {
                    Bucket = googleCredential.BucketName,
                    Name   = googleCredential.Projects + "/" + folderName + "/" + projectProposalfilename + ".docx",
                };

                fileStream = new FileStream(path, FileMode.Open);

                var uploadRequest = new ObjectsResource.InsertMediaUpload(service, newObject, googleCredential.BucketName, fileStream, "application/vnd.google-apps.document");
                uploadRequest.OauthToken = credential.Token.AccessToken;
                var fileResponse = uploadRequest.Upload();

                Console.WriteLine($"File upload status: {fileResponse.Status}");


                var bucketFolderWithFilePath = newObject.Bucket + "/" + newObject.Name;
                if (fileResponse.Status.ToString() == "Completed" && fileResponse.Exception == null)
                {
                    model.FolderName       = folderName;
                    model.ProposalFileName = projectProposalfilename;
                    model.ProposalWebLink  = bucketFolderWithFilePath;
                    model.ProjectId        = Projectid;
                    model.IsDeleted        = false;
                    model.CreatedById      = userid;
                    model.CreatedDate      = DateTime.Now;
                    model.ProposalExtType  = ".docx";
                }
                else
                {
                    Console.WriteLine("not completed");

                    throw new Exception(StaticResource.UnableToUploadFile);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception occured");

                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (fileStream != null)
                {
                    fileStream.Dispose();
                }
            }

            return(model);
        }
        //****************read credential using service account from directory 21/03/19
        //public static async Task<ProjectProposalDetail> StartProposalByDirectory(string projectProposalfilename, string googleCredentialpathFile, string folderName, ViewModels.Models.Project.GoogleCredentialModel googleCredential, long Projectid, string userid)
        //{
        //    FileStream fileStream = null;
        //    ProjectProposalDetail model = new ProjectProposalDetail();

        //    try
        //    {
        //        ProjectProposalModel res = new ProjectProposalModel();
        //        //var scopes = new[] { @"https://www.googleapis.com/auth/cloud-platform" };
        //        //var cts = new CancellationTokenSource();

        //        //StorageService service = new StorageService();
        //        //UserCredential credential;
        //        //using (var stream = new FileStream(googleCredentialpathFile, FileMode.Open, FileAccess.Read))
        //        //{
        //        //    credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
        //        //          GoogleClientSecrets.Load(stream).Secrets,
        //        //          scopes,
        //        //         googleCredential.EmailId, CancellationToken.None);
        //        //}
        //        //// Create the service.
        //        //service = new StorageService(new BaseClientService.Initializer()
        //        //{
        //        //    HttpClientInitializer = credential,
        //        //    ApplicationName = googleCredential.ApplicationName,
        //        //});

        //        var clientSecrets = new ClientSecrets();
        //        clientSecrets.ClientId = "160690498129-pg9hh4gr2ucta6neiik97tv1sla1qkec.apps.googleusercontent.com";
        //        clientSecrets.ClientSecret = "W0Zn9o2KmJFRXDnCbmq9z5m6";
        //        //there are different scopes, which you can find here https://cloud.google.com/storage/docs/authentication
        //        var scopes = new[] { @"https://www.googleapis.com/auth/devstorage.full_control" };

        //        var cts = new CancellationTokenSource();
        //        var userCredential = await GoogleWebAuthorizationBroker.AuthorizeAsync(clientSecrets, scopes, "*****@*****.**", cts.Token);

        //        await userCredential.RefreshTokenAsync(cts.Token);
        //        var service = new Google.Apis.Storage.v1.StorageService();
        //        Console.WriteLine($"---- credential service----: {service}");

        //        var bucketsQuery = service.Buckets.List(StaticResource.ProjectId);
        //        bucketsQuery.OauthToken = userCredential.Token.AccessToken;
        //        var buckets = bucketsQuery.Execute();


        //        var dir = Directory.GetCurrentDirectory();
        //       // var pathCombine = Path.Combine(dir, @"/Documents/Proposal/Proposal.docx");
        //        var pathCombine = Directory.GetCurrentDirectory() + @"/Documents/Proposal/Proposal.docx";

        //        pathCombine = pathCombine.Replace(@"\", "/");

        //        Console.WriteLine($"--------File local folder Path ----------: {pathCombine}");

        //        fileStream = new FileStream(pathCombine, FileMode.Open);


        //        ApiResponse response = new ApiResponse();


        //        Console.WriteLine($"--------convert to linux window File local folder Path ----------: {fileStream}");

        //        var newObject = new Google.Apis.Storage.v1.Data.Object()
        //        {
        //            Bucket = googleCredential.BucketName,
        //            Name = googleCredential.Projects + "/" + folderName + "/" + projectProposalfilename + "xyz" + ".docx",
        //        };

        //        if (fileStream != null)
        //        {
        //            var uploadRequest = new ObjectsResource.InsertMediaUpload(service, newObject, googleCredential.BucketName, fileStream, "application/vnd.google-apps.document");
        //            uploadRequest.OauthToken = userCredential.Token.AccessToken;
        //            var fileResponse = uploadRequest.Upload();

        //            Console.WriteLine($"File upload on bucket status: {fileResponse.Status}");


        //            var bucketFolderWithFilePath = newObject.Bucket + "/" + newObject.Name;
        //            if (fileResponse.Status.ToString() == "Completed" && fileResponse.Exception == null)
        //            {
        //                model.FolderName = folderName;
        //                model.ProposalFileName = projectProposalfilename;
        //                model.ProposalWebLink = bucketFolderWithFilePath;
        //                model.ProjectId = Projectid;
        //                model.IsDeleted = false;
        //                model.CreatedById = userid;
        //                model.CreatedDate = DateTime.Now;
        //                model.ProposalExtType = ".docx";
        //            }
        //        }

        //        else
        //        {
        //            throw new Exception(StaticResource.UnableToUploadFile);
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        Console.WriteLine(ex.Message);
        //    }
        //    finally
        //    {
        //        if (fileStream != null)
        //        {
        //            fileStream.Dispose();
        //        }
        //    }
        //    return model;

        //}


        //************************************read credential from directory using auth credentail and using env as well as directory 20/03/2019

        public static async Task <ProjectProposalDetail> StartProposalByDirectory(string projectProposalfilename, string googleCredentialpathFile, string folderName, GoogleCredentialModel googleCredential, long Projectid, string userid)
        {
            FileStream            fileStream = null;
            ProjectProposalDetail model      = new ProjectProposalDetail();

            try
            {
                ProjectProposalModel res = new ProjectProposalModel();
                var scopes = new[] { @"https://www.googleapis.com/auth/cloud-platform" };
                var cts    = new CancellationTokenSource();

                StorageService service = new StorageService();
                UserCredential credential;
                using (var stream = new FileStream(googleCredentialpathFile, FileMode.Open, FileAccess.Read))
                {
                    credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                        GoogleClientSecrets.Load(stream).Secrets,
                        scopes,
                        googleCredential.EmailId, CancellationToken.None);
                }
                // Create the service.
                service = new StorageService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName       = googleCredential.ApplicationName,
                });
                Console.WriteLine($"---- credential service----: {service}");

                var bucketsQuery = service.Buckets.List(StaticResource.ProjectId);
                bucketsQuery.OauthToken = credential.Token.AccessToken;
                var buckets = bucketsQuery.Execute();


                //enter bucket name to which you want to upload file
                ApiResponse response = new ApiResponse();
                var         path     = Directory.GetCurrentDirectory() + @"/Documents/Proposal/Proposal.docx";

                Console.WriteLine($"--------File local folder Path ----------: {path}");

                path = path.Replace(@"\", "/");
                Console.WriteLine($"--------convert to linux window File local folder Path ----------: {path}");

                var newObject = new Google.Apis.Storage.v1.Data.Object()
                {
                    Bucket = googleCredential.BucketName,
                    Name   = googleCredential.Projects + "/" + folderName + "/" + projectProposalfilename + "xyz" + ".docx",
                };

                fileStream = new FileStream(path, FileMode.Open);
                if (fileStream != null)
                {
                    var uploadRequest = new ObjectsResource.InsertMediaUpload(service, newObject, googleCredential.BucketName, fileStream, "application/vnd.google-apps.document");
                    uploadRequest.OauthToken = credential.Token.AccessToken;
                    var fileResponse = uploadRequest.Upload();

                    Console.WriteLine($"File upload on bucket status: {fileResponse.Status}");


                    var bucketFolderWithFilePath = newObject.Bucket + "/" + newObject.Name;
                    if (fileResponse.Status.ToString() == "Completed" && fileResponse.Exception == null)
                    {
                        model.FolderName       = folderName;
                        model.ProposalFileName = projectProposalfilename;
                        model.ProposalWebLink  = bucketFolderWithFilePath;
                        model.ProjectId        = Projectid;
                        model.IsDeleted        = false;
                        model.CreatedById      = userid;
                        model.CreatedDate      = DateTime.Now;
                        model.ProposalExtType  = ".docx";
                    }
                }

                else
                {
                    throw new Exception(StaticResource.UnableToUploadFile);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (fileStream != null)
                {
                    fileStream.Dispose();
                }
            }
            return(model);
        }