Quantcast
Channel: Active questions tagged blazor - Stack Overflow
Viewing all articles
Browse latest Browse all 4839

Convert iFile to FileStream to Upload to GoogleDrive appears to work but the file has 0 bytes (Blazor Server)

$
0
0

I am able to 'create' a file on google-Drive using the below code however I have noticed the files have 0 bytes. I am using a Service Account which is Editor. I am using the Radzen Upload Control.

<RadzenUpload Url="upload/single" Progress=@(args => TrackProgress(args, "Single file upload")) class="w-100" InputAttributes="@(new Dictionary<string,object>(){ { "aria-label", "select file" }})"> </RadzenUpload>

The controller used to receive the file

[DisableRequestSizeLimit]public partial class UploadController : Controller{    private readonly IWebHostEnvironment environment;    private readonly GoogleDriveService _googleDriveService;    public UploadController(IWebHostEnvironment environment, GoogleDriveService googleDriveService)    {        this.environment = environment;        _googleDriveService = googleDriveService;               }    // Single file upload    [HttpPost("upload/volunteer")]    public IActionResult Volunteer(IFormFile file)    {        try        {            _googleDriveService.UploadFile(file, this.environment);                   return StatusCode(200, file.FileName);        }        catch (Exception ex)        {            return StatusCode(500, ex.Message);        }    }}

My Service for Working with Google Drive

public string UploadFile(IFormFile File, IWebHostEnvironment environment){    string uploadedFileId = "";    string RootFolderId = "xxxxxxxxxxxxxxxxxxxxxxxx";   \\Target Folder    var service = Auth();    try    {        FilesResource.CreateMediaUpload request;        using (var stream = new FileStream(Path.Combine(environment.WebRootPath, File.FileName), FileMode.Create))        {            using (MemoryStream memoryStream = new MemoryStream())            {                stream.CopyTo(memoryStream);                Google.Apis.Drive.v3.Data.File fileMetadata = new Google.Apis.Drive.v3.Data.File                {                    Name = File.FileName,                    Parents = new List<string> { RootFolderId }                };                request = service.Files.Create(fileMetadata, memoryStream, File.ContentType);                request.Fields = "id";                request.SupportsTeamDrives = true;                request.SupportsAllDrives = true;                request.Upload();            }        }        Google.Apis.Drive.v3.Data.File file = request.ResponseBody;        uploadedFileId = file.Id;        return uploadedFileId;    }    catch (Exception ex)    {        var x = ex;    }    return uploadedFileId;}public DriveService Auth(){    var credential = GoogleCredential.FromFile(            Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", PathToServiceAccountKeyFile))            .CreateScoped(DriveService.ScopeConstants.Drive);    // Create the  Drive service.    DriveService service = new DriveService(new BaseClientService.Initializer()    {        HttpClientInitializer = credential    });    return service;}

My Auth code for the API

public DriveService Auth(){    // Load the Service account credentials and define the scope of its access.    var credential = GoogleCredential.FromFile(                    Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", PathToServiceAccountKeyFile))                    .CreateScoped(DriveService.ScopeConstants.Drive);    // Create the  Drive service.    DriveService service = new DriveService(new BaseClientService.Initializer()    {        HttpClientInitializer = credential    });    return service;}

The upload Looks as though it works, a file is created in Google Drive at the right location, there is just no Content (0 bytes)


Viewing all articles
Browse latest Browse all 4839

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>