【发布时间】: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); }
标签: c# .net azure azure-blob-storage