我在尝试将图片上传到我的网站时收到以下错误。
>应用程序中的服务器错误。无法找到路径的一部分 'C:\家\站点\ wwwroot的\程序App_Data \ TEMP \ 1.png'。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.IO.DirectoryNotFoundException:无法 找到路径'C:\ home \ site \ wwwroot \ App_Data \ Temp \ 1.png'的一部分。
来源错误:
执行期间生成了未处理的异常 当前的网络请求。有关的来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
堆栈追踪:
[DirectoryNotFoundException:找不到路径的一部分 'C:\家\网站\ wwwroot的\ App_Data文件\ TEMP \ 1.png'。]
System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath) +353 System.IO.FileStream.Init(String path,FileMode mode,FileAccess access,Int32 rights,Boolean useRights,FileShare share, Int32 bufferSize,FileOptions选项,SECURITY_ATTRIBUTES secAttrs, String msgPath,Boolean bFromProxy,Boolean useLongPath,Boolean checkHost)+1326 System.IO.FileStream..ctor(String path,FileMode 模式,FileAccess访问,FileShare共享,Int32 bufferSize, FileOptions选项,String msgPath,Boolean bFromProxy)+60
System.IO.FileStream..ctor(String path,FileMode mode)+55
System.Web.HttpPostedFile.SaveAs(String filename)+94
System.Web.HttpPostedFileWrapper.SaveAs(String filename)+14
RoomAuditSystem.Controllers.HomeController.Index(HttpPostedFileBase 文件)+96 lambda_method(Closure,ControllerBase,Object [])+104 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller,Object []参数)+14
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary2 parameters) +157
2 参数)+27
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39(IAsyncResult的 asyncResult,ActionInvocation innerInvokeState)+22
System.Web.Mvc.Async.WrappedAsyncResult2.CallEndDelegate(IAsyncResult asyncResult) +29
1.End()+49
System.Web.Mvc.Async.WrappedAsyncResultBase
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult的 asyncResult)+32
System.Web.Mvc.Async.AsyncInvocationWithFilters.b__3d() +50 System.Web.Mvc.Async。<> c__DisplayClass46.b__3f() +225 System.Web.Mvc.Async。<> c__DisplayClass33.b__32(IAsyncResult asyncResult)+10
System.Web.Mvc.Async.WrappedAsyncResult1.CallEndDelegate(IAsyncResult asyncResult) +10
1.End()+49
System.Web.Mvc.Async.WrappedAsyncResultBase
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult的 asyncResult)+34
System.Web.Mvc.Async<> c__DisplayClass2b.b__1c() +26 System.Web.Mvc.Async。<> c__DisplayClass21.b__1e(IAsyncResult) asyncResult)+100
System.Web.Mvc.Async.WrappedAsyncResult1.CallEndDelegate(IAsyncResult asyncResult) +10
1.End()+49
System.Web.Mvc.Async.WrappedAsyncResultBase
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult的 asyncResult)+27
System.Web.Mvc.Controller.b__1d(IAsyncResult的 asyncResult,ExecuteCoreState innerState)+13
System.Web.Mvc.Async.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult) +29
1.End()+49
System.Web.Mvc.Async.WrappedAsyncResultBase
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)+36 System.Web.Mvc.Controller.b__15(IAsyncResult的 asyncResult,控制器控制器)+12
System.Web.Mvc.Async.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult) +22
1.End()+49
System.Web.Mvc.Async.WrappedAsyncResultBase
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)+26
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult的 asyncResult)+10
System.Web.Mvc.MvcHandler.b__5(IAsyncResult的 asyncResult,ProcessRequestState innerState)+21
System.Web.Mvc.Async.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult) +29
1.End()+49
System.Web.Mvc.Async.WrappedAsyncResultBase
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult) 结果)+9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9744373 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)+155
以下是处理此问题的代码部分:
[HttpPost]
public ActionResult Index(HttpPostedFileBase file)
{
if (file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/Temp"), fileName);
file.SaveAs(path);
// create a barcode reader instance
IBarcodeReader reader = new BarcodeReader();
// load a bitmap
Bitmap bitmap = new Bitmap(path);
Bitmap resized = new Bitmap(bitmap, new Size(400, 400));
// detect and decode the barcode inside the bitmap
var result = reader.Decode(resized);
bitmap.Dispose();
// Delete file once we have finished with it
if (System.IO.File.Exists(path))
{
System.IO.File.Delete(path);
}
// do something with the result
if (result != null)
{
return RedirectToAction("Create", "Audit", new { roomID = result.Text });
//txtDecoderType.Text = result.BarcodeFormat.ToString();
}
// Decode error
else
{
return RedirectToAction("Index");
}
}
// File error
else
{
return RedirectToAction("Index");
}
}
它在我的本地计算机上工作正常,但在我在线发布时似乎没有工作。我肯定有一个名为App_Data的目录和我网站根目录中名为Temp的另一个目录。
非常感谢任何帮助。
答案 0 :(得分:3)
例外是明确的。该路径的一部分并不存在。重要的是,App_Data
在发布过程中不会包含在内,因此它只是因为它存在于您的项目本地,并不意味着它实际上存在于您的生产服务器上。除此之外,检查整个路径,即您必须在C驱动器上直接有一个home
目录,该目录必须有site
目录等。
同样,如果一切正常,那就没有办法得到那个例外。该路径的某些部分不正确或不存在。
答案 1 :(得分:0)
通过克里斯的解释管理解决这个问题。即使我在整个应用程序旁边发布了文件夹'Temp'也不存在。我假设因为这个文件夹是空的,它没有与其他所有内容一起发布。所以我手动发布了这个单独的文件夹,嘿presto - 它的工作原理!