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) 从浏览器