Azure Blob 存储 - 从上传控制 .NET 上传

Posted

技术标签:

【中文标题】Azure Blob 存储 - 从上传控制 .NET 上传【英文标题】:Azure Blob Storage - Uploading from Upload Control .NET 【发布时间】:2019-03-18 10:38:51 【问题描述】:

我在将文件从 Web 应用程序上传到 Azure Blob 存储时遇到问题。一切都在开发模式下完美运行,但是当我发布时,我无法上传文件。请问如何访问要上传的文件?以下是我在开发中工作但在生产中工作的代码:

aspx 页面:

 <asp:Panel runat="server" ID="PanelUpload">
     <div class="form-group">
         <input type="file" id="myfile" multiple="multiple" name="myfile" runat="server" />
     </div> <br />
     <asp:Button ID="Button_Upload" runat="server" Text="Upload New Images" OnClick="Click_UploadImages" CssClass="btn btn-primary mr-1 mb-1 w-100" />
                <br />
      <asp:Label ID="Span1" runat="server"></asp:Label>
  </asp:Panel>

代码背后:

    protected void Click_UploadImages(object sender, EventArgs e)
    
        HttpFileCollection uploadedFiles = Request.Files;
        CloudStorageAccount sa = CloudStorageAccount.Parse(connString);
        CloudBlobClient bc = sa.CreateCloudBlobClient();
        CloudBlobContainer container = bc.GetContainerReference(destContainer);
        container.CreateIfNotExists();

        for (int i = 0; i < uploadedFiles.Count; i++)
        
            HttpPostedFile userPostedFile = uploadedFiles[i];
            try
            
                if (userPostedFile.ContentLength > 0)
                
                    CloudBlockBlob b = container.GetBlockBlobReference(product_id + "-" + i + Path.GetExtension(userPostedFile.FileName));
                    //b.UploadFromFile(userPostedFile.FileName);
                    using (var fs = File.Open(userPostedFile.FileName, FileMode.Open, FileAccess.Read, FileShare.None))
                    
                        b.UploadFromStream(fs);
                    

                    //Image Record to SQL After BLOB Upload
                    TraceBlobImageUsingSQL T = new TraceBlobImageUsingSQL();
                    T.ImageSQLEntry(product_id, i, "productimages", b.Name, userPostedFile.ContentLength, Path.GetExtension(userPostedFile.FileName), Context.User.Identity.GetUserId());
                
            
            catch (Exception Ex)
            
                Span1.Text += "Error: <br>" + Ex.Message;
            
        
        RenderhtmlPanelData(Request.QueryString["ProductID"]);
    

【问题讨论】:

你能解释一下吗=> I am unable to upload the files 您遇到任何错误或异常吗? 当我选择要上传的文件并按下上传按钮时,我发现此错误:找不到文件'c:\windows\system32\inetsrv\selectedfile.jpg'。我尝试使用 Server.MapPath("~") 等更改路径,但一旦发布就无法正常工作。 尝试在此处添加断点 => HttpFileCollection uploadedFiles = Request.Files; 并观察uploadedFiles 中是否存在任何文件? 不要打开 FileStream,而是尝试直接将文件内容读取为流:docs.microsoft.com/en-us/dotnet/api/…。比如:using (var stream = userPostedFile.InpuStream) b.UploadFromStream(stream); 【参考方案1】:

HttpPostedFile 公开了InputStream 属性,可让您直接以流的形式读取内容。使用它而不是打开文件流:

                using (var stream = userPostedFile.InpuStream)
                
                    b.UploadFromStream(stream);
                

【讨论】:

以上是关于Azure Blob 存储 - 从上传控制 .NET 上传的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Azure.Storage.Blobs NuGet 包将文件上传到 Azure Blob 存储

Azure Blob PHP SDK - 直接从自定义多部分 API 请求上传到 Azure 存储

将文件从浏览器上传到 Azure Blob 存储,无需 SAS 密钥

使用java中的azure函数将文件从浏览器上传到azure blob存储

恢复文件从用户的机器上传到 Azure Blob 存储和从 Azure Blob 下载文件到用户的机器在 Typescript(angular) 从浏览器

直接从前端将数据上传到 Azure Blob 存储时的安全问题