asp.net mvc web api保存图片到项目文件夹报错

殷小强 殷小强 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
想要实现的功能是:根据图片的url生成一张图片,然后把图片保存到项目中某个文件夹里。

[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

weixin_38664159

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项目。

huhuateng

使用AngularJs ASP.NET MVC Web API EF构建一个多层SPA的例子

在本文中,我们将深入探讨如何使用AngularJS、ASP.NET MVC、Web API和Entity Framework(EF)构建一个完整的多层Single Page Application(SPA

threenewbee

ASP.NET MVC Web Api 跨域访问

在ASP.NET MVC Web API中实现跨域访问,有以下几种方法:1.

cj21828
评论 3
收藏 已收藏
分享
返回顶部
殷小强
其他 10,610 成员 29,026 内容