asp.net mvc web api保存图片到项目文件夹报错
[ResponseType(typeof(PictureModel))]
public IHttpActionResult PostPictureModel(PictureModel pictureModel)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
//上传图片到文件夹
string basePath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
//GetImg(pictureModel.PicUrl);
DownloadPicture(pictureModel.PicUrl, basePath + "\\Upload\\Pics", 18000);
db.PictureModels.Add(pictureModel);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = pictureModel.ID }, pictureModel);
}private static bool DownloadPicture(string picUrl, string savePath, int timeOut)
{
bool value = false;
WebResponse response = null;
Stream stream = null;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(picUrl);
if (timeOut != -1) request.Timeout = timeOut;
response = request.GetResponse();
stream = response.GetResponseStream();
if (!response.ContentType.ToLower().StartsWith("text/"))
value = SaveBinaryFile(response, savePath);
}
finally
{
if (stream != null) stream.Close();
if (response != null) response.Close();
}
return value;
}
private static bool SaveBinaryFile(WebResponse response, string savePath)
{
bool value = false;
byte[] buffer = new byte[1024];
Stream outStream = null;
Stream inStream = null;
try
{
if (File.Exists(savePath)) File.Delete(savePath);
outStream = System.IO.File.Create(savePath);
inStream = response.GetResponseStream();
int l;
do
{
l = inStream.Read(buffer, 0, buffer.Length);
if (l > 0) outStream.Write(buffer, 0, l);
} while (l > 0);
value = true;
}
finally
{
if (outStream != null) outStream.Close();
if (inStream != null) inStream.Close();
}
return value;
}错误:
{"readyState":4,"responseText":"{\"Message\":\"出现错误。\",\"ExceptionMessage\":\"对路径“C:\\\\_github\\\\UMAPP\\\\UMAPP\\\\Upload\\\\Pics”的访问被拒绝。\",\"ExceptionType\":\"System.UnauthorizedAccessException\",\"StackTrace\":\" 在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)\\r\\n 在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)\\r\\n 在 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)\\r\\n 在 System.IO.File.Create(String path)\\r\\n 在 UMAPP.Controllers.CollectController.SaveBinaryFile(WebResponse response, String savePath) 位置 C:\\\\_github\\\\UMAPP\\\\UMAPP\\\\Controllers\\\\CollectController.cs:行号 193\\r\\n 在 UMAPP.Controllers.CollectController.DownloadPicture(String picUrl, String savePath, Int32 timeOut) 位置 C:\\\\_github\\\\UMAPP\\\\UMAPP\\\\Controllers\\\\CollectController.cs:行号 175\\r\\n 在 UMAPP.Controllers.CollectController.PostPictureModel(PictureModel pictureModel) 位置 C:\\\\_github\\\\UMAPP\\\\UMAPP\\\\Controllers\\\\CollectController.cs:行号 86\\r\\n 在 lambda_method(Closure , Object , Object[] )\\r\\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.b__9(Object instance, Object[] methodParameters)\\r\\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\\r\\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)\\r\\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\\r\\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\\r\\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n 在 System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\\r\\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\\r\\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\\r\\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n 在 System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\\r\\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\\r\\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\\r\\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n 在 System.Web.Http.Controllers.AuthenticationFilterResult.d__0.MoveNext()\\r\\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\\r\\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\\r\\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\\r\\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()\"}","responseJSON":{"Message":"出现错误。","ExceptionMessage":"对路径“C:\\_github\\UMAPP\\UMAPP\\Upload\\Pics”的访问被拒绝。","ExceptionType":"System.UnauthorizedAccessException","StackTrace":" 在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)\r\n 在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)\r\n 在 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)\r\n 在 System.IO.File.Create(String path)\r\n 在 UMAPP.Controllers.CollectController.SaveBinaryFile(WebResponse response, String savePath) 位置 C:\\_github\\UMAPP\\UMAPP\\Controllers\\CollectController.cs:行号 193\r\n 在 UMAPP.Controllers.CollectController.DownloadPicture(String picUrl, String savePath, Int32 timeOut) 位置 C:\\_github\\UMAPP\\UMAPP\\Controllers\\CollectController.cs:行号 175\r\n 在 UMAPP.Controllers.CollectController.PostPictureModel(PictureModel pictureModel) 位置 C:\\_github\\UMAPP\\UMAPP\\Controllers\\CollectController.cs:行号 86\r\n 在 lambda_method(Closure , Object , Object[] )\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.b__9(Object instance, Object[] methodParameters)\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\r\n 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)\r\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n 在 System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\r\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n 在 System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\r\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n 在 System.Web.Http.Controllers.AuthenticationFilterResult.d__0.MoveNext()\r\n--- 引发异常的上一位置中堆栈跟踪的末尾 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()"},"status":500,"statusText":"Internal Server Error"}
相关推荐
创建一个完整的ASP.NET Web API项目
"本文主要介绍了如何使用Visual Studio创建一个完整的ASP.NET Web API项目,包括步骤和示例代码。ASP.NET Web API是一个用于构建RESTful服务的框架,它与AS
ASP.NET实战:5个完整项目讲透MVC、Web API、文件上传与报表导出
在Web开发学习中,从基础语法到完整项目之间往往存在巨大鸿沟。理解ASP.NET MVC的路由映射、控制器与视图的数据交互,以及Entity Framework的Code First迁移原理,是构建可维护系统的基础。通过实际项目掌握登录鉴权、RESTful API设计、文件流处理与数据导出等能力,能大幅提升工程落地效率。无论是满足资产管理系统ASP.NET MVC Web 免费下载这类高频业务需求,还是处理StreamReader(HttpContext.Request.Body)读取原始请求体的场景,这些
ASP.NET MVC4 Web API+VS2013 编写、发布及部署流程
本教程将详细介绍如何使用ASP.NET MVC4 Web API和VS2013进行编写、发布及部署的全过程。首先,编写阶段涉及创建一个新的ASP.NET Web API项目。
使用AngularJs ASP.NET MVC Web API EF构建一个多层SPA的例子
在本文中,我们将深入探讨如何使用AngularJS、ASP.NET MVC、Web API和Entity Framework(EF)构建一个完整的多层Single Page Application(SPA
ASP.NET MVC Web Api 跨域访问
在ASP.NET MVC Web API中实现跨域访问,有以下几种方法:1.


其他
