以下代码用于我的网站插入照片,在我的计算机上,我可以插入图片,但当我将它传输到远程机器时,我收到错误消息。这是代码:
Protected Sub dvPictureInsert_ItemInserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertedEventArgs) Handles dvPictureInsert.ItemInserted
'If the record was successfully inserted, save the picture
If e.AffectedRows > 0 Then
'Determine the maximum pictureID for this user
Dim results As DataView = CType(maxPictureIDDataSource.Select(DataSourceSelectArguments.Empty), DataView)
Dim pictureIDJustAdded As Integer = CType(results(0)(0), Integer)
'Reference the FileUpload control
Dim imageUpload As FileUpload = CType(dvPictureInsert.FindControl("imageUpload"), FileUpload)
If imageUpload.HasFile Then
Dim baseDirectory As String = Server.MapPath("~/UploadedImages/")
imageUpload.SaveAs(baseDirectory & pictureIDJustAdded & ".jpg")
End If
以下是错误消息:
'/ please-god'中的服务器错误 应用。访问路径 'd:\主机\ 4423045 \ HTML \请神\ UploadedImages \ 3.JPG' 被拒绝。描述:未处理 期间发生了异常 执行当前的Web请求。 请查看堆栈跟踪了解更多信息 有关错误的信息和位置 它起源于代码。
异常详细信息: System.UnauthorizedAccessException的: 访问路径 'd:\主机\ 4423045 \ HTML \请神\ UploadedImages \ 3.JPG' 被拒绝。
ASP.NET无权访问 请求的资源。考虑 授予对资源的访问权限 到ASP.NET请求标识。 ASP.NET具有基本进程标识 (通常是IIS 5上的{MACHINE} \ ASPNET 或IIS 6上的网络服务) 如果申请不是,则使用 冒充。如果申请是 冒充通过,身份会 是匿名用户(通常是 IUSR_MACHINENAME)或经过身份验证的 请求用户。
要授予对文件的ASP.NET访问权限, 在资源管理器中右键单击该文件, 选择“属性”并选择 安全选项卡。单击“添加”以添加 适当的用户或组。突出 ASP.NET帐户,并检查 用于所需访问的框。
来源错误:
第21行:如果 imageUpload.HasFile然后第22行:
Dim baseDirectory As String = 使用Server.Mappath( “〜/ UploadedImages /”) 第23行:
imageUpload.SaveAs(baseDirectory& pictureIDJustAdded& “.jpg”)第24行: 结束如果第25行:结束如果来源 文件: d:\主机\ 4423045 \ HTML \请神\ PhotoAdmin \ Default.aspx.vb 行:23堆栈追踪:
[UnauthorizedAccessException:Access 到了路上 'd:\主机\ 4423045 \ HTML \请神\ UploadedImages \ 3.JPG' 被拒绝。]
System.IO .__ Error.WinIOError(的Int32 errorCode,String maybeFullPath) +7715167 System.IO.FileStream.Init(String path, FileMode模式,FileAccess访问, Int32权限,布尔值使用权限, FileShare共享,Int32 bufferSize, FileOptions选项, SECURITY_ATTRIBUTES secAttrs,String msgPath,Boolean bFromProxy)+1162
System.IO.FileStream..ctor(字符串 path,FileMode模式,FileAccess 访问,FileShare共享,Int32 bufferSize,FileOptions选项, String msgPath,Boolean bFromProxy) +61 System.IO.FileStream..ctor(String 路径,FileMode模式)+55
System.Web.HttpPostedFile.SaveAs(字符串 文件名)+99
System.Web.UI.WebControls.FileUpload.SaveAs(字符串 文件名)+23
PhotoAdmin_Default.dvPictureInsert_ItemInserted(对象 sender,DetailsViewInsertedEventArgs e)in d:\主机\ 4423045 \ HTML \请神\ PhotoAdmin \ Default.aspx.vb:23 System.Web.UI.WebControls.DetailsView.OnItemInserted(DetailsViewInsertedEventArgs e)+108
System.Web.UI.WebControls.DetailsView.HandleInsertCallback(的Int32 affectedRows,Exception ex)+69
System.Web.UI.DataSourceView.Insert(IDictionary的 值 DataSourceViewOperationCallback 回调)+134
System.Web.UI.WebControls.DetailsView.HandleInsert(字符串 commandArg,Boolean causeValidation) +274 System.Web.UI.WebControls.DetailsView.HandleEvent(EventArgs e,Boolean causeValidation,String validationGroup)+676
System.Web.UI.WebControls.DetailsView.OnBubbleEvent(对象 来源,EventArgs e)+95
System.Web.UI.Control.RaiseBubbleEvent(对象 来源,EventArgs args)+37
System.Web.UI.WebControls.DetailsViewRow.OnBubbleEvent(对象 来源,EventArgs e)+113
System.Web.UI.Control.RaiseBubbleEvent(对象 来源,EventArgs args)+37
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e)+118
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(字符串 eventArgument)+135
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 eventArgument)+10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)+175
System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+1565
答案 0 :(得分:1)
您必须确保运行网站的IIS或服务器有权写入该目录。 您可以通过选择该文件夹来执行此操作 - >属性 - >安全选项卡。
如果这没有帮助,您可以在事件日志中重新检查,以了解它尝试访问的帐户。
您可能也想阅读this帖子。
答案 1 :(得分:0)
即使您将应用程序池设置为具有正确权限的用户,如果您在web.config中打开了模拟,那么您将收到此错误。
从web.config中删除此行将关闭模拟。
<identity impersonate="true" />
答案 2 :(得分:0)
今天我遇到了同样的问题,我也在本地和实时服务器上对其进行了测试,但是相同的错误使我感到沮丧。然后,我决定认真检查我的code
,以便找出导致问题的原因。问题是,我没有在fileupload SaveAs()
方法中指定文件名。我知道操作人员会指定一条正确的路径,但将来可能会发生在其他人身上。
我的代码之前如何看:
fileupload.SaveAs(Server.MapPath($"{basedir}"));
现在的样子:
fileupload.SaveAs(Server.MapPath($"{basedir}/{fileupload.FileName}"));