asp.net同一个页面上传文件后接着删除文件遇到正由另一进程使用,因此该进程无法访问此文件的错误无法正确执行程序

u010077823 2017-07-21 05:01:18
HttpFileCollection upFiles = context.Request.Files;
//获取客户端上传的文件集合
//判断是否存在文件
if (upFiles.Count > 0)
{
//获取文件集合中的第一个文件(每次只上传一个文件)
HttpPostedFile Banner1 = upFiles[0];
//定义文件存放的目标路径
string targetDir = System.Web.HttpContext.Current.Server.MapPath("../company/images/tv/");

if (model.Tv != "")
{
try
{
File.Delete(targetDir + model.Tv
);
}
catch (Exception)
{
throw;
}
}
int tt = Banner1.FileName.LastIndexOf(".");
string filetype = Banner1.FileName.Substring(tt);
if (filetype.ToLower() != ".mp4" && filetype.ToLower() != ".3gp" && filetype.ToLower() != ".flv")
{
context.Response.Write("{\"type\":\"文件格式不正确\"}");
}
else
{
//创建目标路径
CreateDirectory(targetDir);
//组合成文件的完整路径
DateTime dt = System.DateTime.Now;
string endDate = dt.ToString("yyyyMMddhhmmss");
string Banner1path = System.IO.Path.Combine(targetDir, endDate + System.IO.Path.GetFileName(Banner1.FileName));
//保存上传的文件到指定路径中
Banner1.SaveAs(Banner1path);
//插入到数据库中
model.Tv = endDate + Banner1.FileName;
if (model != null)
{
if (bll.UpdateW_CustomerInfo(model) > 0)
{

context.Response.Write("{\"type\":\"上传成功\",\"url\":\"../images/tv/" + endDate + Banner1.FileName + "\"}");
}
}
else
{
model.Uid = Convert.ToInt32(context.Session["id"]);
if (bll.AddW_CustomerInfo(model) > 0)
{

context.Response.Write("{\"type\":\"上传成功\",\"url\":\"../images/tv/" + endDate + Banner1.FileName + "\"}");
}
}
}
}

大家好,最近做了一个上传视频的一般处理程序,和前端前后台分离实现视频上传功能,接口中每次保存文件前都判断删除曾经上传的旧文件,而当我快速连续上传两次文件的时候在File.Delete位置报了一个“正由另一进程使用,因此该进程无法访问此文件的错误无法正确执行程序”的错误,而在上传后等一段时间再上传则不会出现错误。我认为可能是由于HttpPostedFile.SaveAs未完成上传完文件的问题,但是查了很多帖子资料没有找到解决方法。请问大家有解决的办法吗?
...全文
175 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2017-07-21
  • 打赏
  • 举报
回复
try{ } catch(Execption ex){ //如果有异常则改名保存 }
吉普赛的歌 2017-07-21
  • 打赏
  • 举报
回复
如果有同名文件, 则改名保存就是了。
ASP.NET ASP.NET 概述 ASP.NET 是一个统一的 Web 开发模型,它包括您使用尽可能少的代码生成企业级 Web 应用程序所必需的各种服务。ASP.NET 作为 .NET Framework 的一部分提供。当您编写 ASP.NET 应用程序的代码时,可以访问 .NET Framework 中的类。您可以使用与公共语言运行库 (CLR) 兼容的任何语言来编写应用程序的代码,这些语言包括 Microsoft Visual Basic、C#、JScript .NET 和 J#。使用这些语言,可以开发利用公共语言运行库、类型安全、继承等方面的优点的 ASP.NET 应用程序。 ASP.NET 包括: 页和控件框架 ASP.NET 编译器 安全基础结构 状态管理功能 应用程序配置 运行状况监视和性能功能 调试支持 XML Web services 框架 可扩展的宿主环境和应用程序生命周期管理 可扩展的设计器环境 页和控件框架 ASP.NET 页和控件框架是一种编程框架,它在 Web 服务器上运行,可以动态地生成和呈现 ASP.NET 网页。可以从任何浏览器或客户端设备请求 ASP.NET 网页,ASP.NET 会向请求浏览器呈现标记(例如 HTML)。通常,您可以对多个浏览器使用相同的页,因为 ASP.NET 会为发出请求的浏览器呈现适当的标记。但是,您可以针对诸如 Microsoft Internet Explorer 6 的特定浏览器设计 ASP.NET 网页,并利用该浏览器的功能。ASP.NET 支持基于 Web 的设备(如移动电话、手持型计算机和个人数字助理 (PDA))的移动控件。 ASP.NET 网页是完全面向对象的。在 ASP.NET 网页中,可以使用属性、方法和事件来处理 HTML 元素。ASP.NET 页框架为响应在服务器上运行的代码中的客户端事件提供统一的模型,从而使您不必考虑基于 Web 的应用程序中固有的客户端和服务器隔离的实现细节。该框架还会在页处理生命周期中自动维护页及该页上控件的状态。有关更多信息,请参见 ASP.NET 网页概述。 使用 ASP.NET 页和控件框架还可以将常用的 UI 功能封装成易于使用且可重用的控件。控件只需编写一次,即可用于许多页并集成到 ASP.NET 网页中。这些控件在呈现期间放入 ASP.NET 网页中。 ASP.NET 页和控件框架还提供各种功能,以便可以通过主题和外观来控制网站的整体外观和感觉。可以先定义主题和外观,然后在页面级或控件级应用这些主题和外观。有关更多信息,请参见 ASP.NET 主题和外观概述。 除了主题外,还可以定义母版页,以使应用程序中的页具有一致的布局。一个母版页可以定义您希望应用程序中的所有页(或一组页)所具有的布局和标准行为。然后可以创建包含要显示的页特定内容的各个内容页。当用户请求内容页时,这些内容页与母版页合并,产生将母版页的布局与内容页中的内容组合在一起的输出。有关更多信息,请参见 ASP.NET 母版页概述。 ASP.NET 编译器 所有 ASP.NET 代码都经过了编译,可提供强类型、性能优化和早期绑定以及其他优点。代码一经编译,公共语言运行库会进一步将 ASP.NET 编译为本机代码,从而提供增强的性能。 ASP.NET 包括一个编译器,该编译器将包括页和控件在内的所有应用程序组件编译成一个程序集,之后 ASP.NET 宿主环境可以使用该程序集来处理用户请求。有关更多信息,请参见 ASP.NET 编译概述。 安全基础结构 除了 .NET 的安全功能外,ASP.NET 还提供了高级的安全基础结构,以便对用户进行身份验证和授权,并执行其他与安全相关的功能。您可以使用由 IIS 提供的 Windows 身份验证对用户进行身份验证,也可以通过您自己的用户数据库使用 ASP.NET Forms 身份验证和 ASP.NET 成员资格来管理身份验证。此外,可以使用 Windows 组或您自己的自定义角色数据库(使用 ASP.NET 角色)来管理 Web 应用程序的功能和信息方面的授权。您可以根据应用程序的需要方便地移除、添加或替换这些方案。有关更多信息,请参见下列主题: ASP.NET 网站安全性 使用成员资格管理用户 使用角色管理授权 Forms 身份验证提供程序 ASP.NET 始终使用特定的 Windows 标识运行,因此,您可以通过使用 Windows 功能(例如 NTFS 访问控制列表 (ACL)、数据库权限等等)来保护应用程序的安全。有关 ASP.NET 标识的更多信息,请参见配置 ASP.NET 进程标识和 ASP.NET 模拟。 状态管理功能 ASP.NET

110,556

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧