繁体   English   中英

将映像上传到Azure Blob存储-本地工作,部署后失败

[英]Uplod images to azure blob storage - Works locally, fails when deployed

我使用ASPNetBoilerplate作为基本框架,使用.Net Core模板,并且试图将照片上传到Blob存储。 该站点托管在Azure Web App中,并且Blob存储位于同一订阅中。

我正在使用下面的代码,当我在调试模式下本地运行时,它可以工作,但是一旦将其部署到Azure,就会出现无法找到文件D:\\ public \\ images \\的错误。

谁能看到我为azure部署所做的错误操作,或者为什么它会在本地运行但不能在Azure中运行。

我正在尝试从guid生成上传的文件名,将图像上传到azure,然后将生成的文件名存储到sql数据库中。

任何帮助或建议,将不胜感激。

 public async Task<ICollection<BlogImage>> UploadFileAsync(ICollection<IFormFile> files, string RecordType,  int id) {
        ICollection<BlogImage> _blogImages = new Collection<BlogImage>();


         string imageFullPath = null;
        if (files == null || files.Count == 0)
        {
             await Task.FromException(new Exception("No File Supplied"));
        }
        try
        {
            //Connect To Azure
            CloudStorageAccount cloudStorageAccount = GetAuth();

            //Create a refernce to blob client
            CloudBlobClient cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();

            //Create a reference to the container
            CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("images");

            if (await cloudBlobContainer.CreateIfNotExistsAsync())
            {
                await cloudBlobContainer.SetPermissionsAsync(
                    new BlobContainerPermissions
                    {
                        PublicAccess = BlobContainerPublicAccessType.Blob
                    }
                );
            }

            foreach (var file in files)
            {

                string imageName = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName);

                CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(RecordType + "/" +id.ToString() + "/" + imageName);
                cloudBlockBlob.Properties.ContentType = file.ContentType;

                // Stream fileStream = File.OpenRead(file)
                Logger.Info("file name is: " + file.FileName + " Name is: " + file.Name + " Generated Name is: " + imageName);
                using (Stream fileStream = File.OpenRead(file.FileName))
                {
                    Logger.Info("File Opened;");

                    // Upload the file
                    await cloudBlockBlob.UploadFromStreamAsync(fileStream);
                    System.Drawing.Image image = System.Drawing.Image.FromStream(fileStream);

                    var im = new BlogImage { ImageName = imageName, Size = file.Length, ContentType = file.ContentType, Height = image.Height, Width = image.Width };
                    fileStream.Dispose();
                    _Images.Add(im);
                }

                imageFullPath = cloudBlockBlob.Uri.ToString();
            }
        }
        catch (Exception ex)
        {
            Logger.Error("Exception triggered: " + ex.Message);
            _telemetryClient.TrackException(ex);
        }
        return _Images;
    }

您使用File.OpenRead方法读取带有路径的文件流(该路径可能不存在-取决于您用来承载App的Azure服务)。 但是,您可能应该对传递的IFormFile使用OpenReadStream()来获取流。

这是因为您的应用程序现在已部署在云上,并且路径配置不正确。 您可以尝试以下步骤-

  • 转到订阅下的资源,然后选择用于部署应用程序的应用程序服务。 在此处输入图片说明
  • 在“开发工具”下,选择“高级工具”,然后单击“执行”。 这将带您到已部署应用程序的伪硬盘驱动器。

在此处输入图片说明

  • 在调试控制台下,选择CMD。

在此处输入图片说明

  • 如下所示。 在适当的路径中创建/放置文件,然后使用该路径。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM