无法从HTML上传图像到Azure blob

本文关键字:图像 Azure blob HTML | 更新日期: 2023-09-27 18:04:51

我试图将用户通过网页上传到Azure存储的图像保存为blob。我已经构建了代码并对其进行了测试,我正在连接并创建blob,没有任何问题,但它似乎没有正确保存文件,因为当我通过HTTP访问文件时,我只是得到"破碎的图像"图标。如果我直接从Azure门户下载文件并尝试在图像编辑器(paint)中打开它,我会收到一条消息,说该文件不是有效的位图文件。你可以在

看到我刚刚尝试上传的文件https://gisstore01.blob.core.windows.net/ffinfofiles/Test/Core/Logo.jpg

,这里是我用来上传文件的代码。我不知道这里出了什么问题,有什么建议吗?

        var StorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"].ToString());
        var BlobClient = StorageAccount.CreateCloudBlobClient();
        var Container = BlobClient.GetContainerReference("ffinfofiles");
        var FileExtension = Path.GetExtension(UploadedFile.FileName.ToLower());
        var BlobBlock = Container.GetBlockBlobReference(FileName + FileExtension);
        BlobBlock.Properties.ContentType = UploadedFile.ContentType;
        using (UploadedFile.InputStream)
        {
            BlobBlock.UploadFromStream(UploadedFile.InputStream);
        }

O,这是一个ASP。. Net 4.6应用程序

无法从HTML上传图像到Azure blob

我已经运行了一个快速的原型,我成功地上传和下载了图像,所以我怀疑你的问题可能是以下之一:

1)Blob容器默认不允许公共访问。这可能是图像存储良好的时刻,但你的浏览器只是没有权限看到它。查看一下你的ffinffiles blob容器设置,确保"Public Read Access"设置为true

2)你用来设置上传调用的信息都是动态的,所以总是有可能你作为参数传递的数据是错误的。仔细检查UploadedFile.FileName.ToLower()是否正确,更重要的是UploadedFile.ContentType是否正确

3)继续上面第2项的想法,你必须确保UploadedFile.InputStream是有效的。除非您确实是从本地磁盘以外的其他来源流式传输文件内容,否则我实际上只会读取文件字节并使用blobbblock . uploadfrombytearray()重载。请记住,这样做虽然可以有效地首先将文件读入内存,但如果文件足够小(如本例中的jpg),则不应该有问题

结论:

以下是我用作概念证明的代码。
var StorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"].ToString());
var BlobClient = StorageAccount.CreateCloudBlobClient();
var Container = BlobClient.GetContainerReference("ffinfofiles");
Container.CreateIfNotExists();
var BlobBlock = Container.GetBlockBlobReference(filename);
BlobBlock.Properties.ContentType = "image/jpg";
var fileContent = System.IO.File.ReadAllBytes(Server.MapPath("~/images/" + filename));
BlobBlock.UploadFromByteArray(fileContent,0,fileContent.Length);
PS:为了进一步改进这一点,可以考虑使用Async重载,即blobbblock . uploadfrombytearrayasync ()