asp.net如何实现上传文件并显示本地绝对路径的实例代码详解

教程大全 2026-01-27 00:34:12 浏览

ASP.NET实现上传文件显示本地绝对路径的实例代码

ASP.NET文件上传基础与本地路径概念

在ASP.NET应用中,文件上传是常见功能(如用户头像上传、文档提交等)。 本地绝对路径 是指文件在服务器物理存储中的完整路径(如 C:inetpubwwwrootMyAppupLoadsuser-avatar.png ),而非相对路径(如 ~/uploads/ ),获取并显示该路径对日志记录、服务器端处理(如数据库存储文件名)至关重要。

核心知识点:

net上传文件获取绝对路径

实现文件上传并获取本地绝对路径的步骤

以下是完整的实现流程,涵盖Web Forms和MVC两种主流架构。

Web Forms实现(经典架构)

(1)前台代码 在.aspx页面添加文件上传控件和按钮,绑定上传事件:

(2)后台逻辑 在按钮点击事件中,通过 Server.MapPath 获取物理路径,结合上传目录(如)生成绝对路径:

protected void btnUpload_Click(object sender, EventArgs e){if (FileUpload1.HasFile){// 获取上传文件名string fileName = FileUpload1.FileName;// 获取当前应用程序根目录的物理路径string rootPath = Server.MapPath("~/");// 定义上传目录(虚拟路径)string uploadDir = "~/uploads/";// 转换为物理路径(当前应用根目录 + 上传目录)string physicalDir = Server.MapPath(uploadDir);// 检查目录是否存在,不存在则创建if (!Directory.Exists(physicalDir)){Directory.CreateDirectory(physicalDir);}// 生成绝对路径(物理路径 + 文件名)string absolutePath = Path.combine(physicalDir, fileName);// 保存文件FileUpload1.SaveAs(absolutePath);// 输出结果Response.Write($"文件已上传,本地绝对路径为:{absolutePath}");}else{Response.Write("请选择文件");}}

MVC实现(现代架构)

(1)控制器方法 使用 HttpPostedFileBase 接收文件,通过 Server.MapPath 获取物理路径:

[HttpPost]public IActionResult UploadFile(HttpPostedFileBase file){if (file != null && file.ContentLength > 0){// 获取当前应用程序根目录的物理路径string rootPath = Server.MapPath("~/");// 定义上传目录(虚拟路径)string uploadDir = "~/uploads/";// 转换为物理路径string physicalDir = Server.MapPath(uploadDir);// 检查目录if (!Directory.Exists(physicalDir)){Directory.CreateDirectory(physicalDir);}// 生成绝对路径string absolutePath = Path.Combine(physicalDir, file.FileName);// 保存文件file.SaveAs(absolutePath);// 返回结果return Json(new { success = true, path = absolutePath });}return Json(new { success = false, message = "请选择文件" });}

深入优化与安全考虑

结合 酷番云 产品的经验案例

案例背景 :某电商项目需处理用户上传的商品图片(日均1000+文件),传统方式直接存储在本地服务器面临存储空间不足、数据安全风险等问题。

解决方案

实施效果

常见问题解答(FAQs)

问题1:如何处理上传文件后路径的缓存问题?

问题2:不同ASP.NET版本(.NET Framework vs .NET Core)的路径获取差异?

权威文献参考

通过以上步骤,可高效实现ASP.NET中文件上传的本地绝对路径获取,结合酷番云云存储服务还能进一步提升数据管理的可靠性。


如何在js代码里写绝对路径

$({url : ${BASE_PATH}/user/checkPower,type : POST,async: false, //同步执行data : {optpurview : optpurview},dataType : JSON,success : function(data) {if(!) {callbackfunc();}},error : function(data) {$(提示, 系统异常,请联系管理员!, error);}

网站页面导入css,图片等文件的相对路径和绝对路径问题

如果是外联css(css文件与html文件分离的),则css中的图片路径是相对于css文件而不是html文件的,比如你附图中的那个png图片,应该位于css文件的上级目录的images子目录的kpjh子目录中,否则就出错。 如果网站的目录结构比较复杂,很难理清文件的相对关系,可以使用绝对路径,比如说images目录假如位于网站的根目录,那么你可以用/images/kpjh/...,也就是把开头的两个小数点去掉。 更保险的办法是在前面加上网址变成完整的url,这样即使图片文件放到其他网站也能调用。 如果希望得到更简单的方法,那么可以把css文件与图片文件放在同一个目录,这样css文件中就不需要再写图片的路径了,直接写图片文件名即可!如果是内联css(css代码直接写到html文件中),则图片路径是相对于html文件的。 所以你要自己检查一下图片路径是否写正确,然后根据我上面的说明进行修改。

asp上传图片源码

<%class clsUp 文件上传类------------------------Dim Form,FileDim AllowExt_ 允许上传类型(白名单)Dim NoAllowExt_ 不允许上传类型(黑名单)Private oUpFileStream 上传的数据流Private isErr_ 错误的代码,0或true表示无错Private ErrMessage_ 错误的字符串信息Private isGetData_ 指示是否已执行过GETDATA过程------------------------------------------------------------------类的属性Public Property Get VersionVersion=Version 2004End PropertyPublic Property Get isErr 错误的代码,0或true表示无错isErr=isErr_End PropertyPublic Property Get ErrMessage 错误的字符串信息ErrMessage=ErrMessage_End PropertyPublic Property Get AllowExt 允许上传类型(白名单)AllowExt=AllowExt_End PropertyPublic Property Let AllowExt(Value) 允许上传类型(白名单)AllowExt_=LCase(Value)End PropertyPublic Property Get NoAllowExt 不允许上传类型(黑名单)NoAllowExt=NoAllowExt_End PropertyPublic Property Let NoAllowExt(Value) 不允许上传类型(黑名单)NoAllowExt_=LCase(Value)End Property----------------------------------------------------------------类实现代码初始化类Private Sub Class_InitializeisErr_ = 0NoAllowExt= 黑名单,可以在这里预设不可上传的文件类型,以文件的后缀名来判断,不分大小写,每个每缀名用;号分开,如果黑名单为空,则判断白名单NoAllowExt=LCase(NoAllowExt)AllowExt= 白名单,可以在这里预设可上传的文件类型,以文件的后缀名来判断,不分大小写,每个后缀名用;号分开AllowExt=LCase(AllowExt)isGetData_=falseEnd Sub类结束Private Sub Class_Terminate on error Resume Next清除变量及对像 Form = File = oUpFileStream = NothingEnd Sub分析上传的数据Public Sub GetData (MaxSize)定义变量on error Resume Nextif isGetData_=false then Dim RequestBinDate,sSpace,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfoDim sFormValue,sFileNameDim iFindStart,iFindEndDim iFormStart,iFormEnd,sFormName代码开始If < 1 Then 如果没有数据上传isErr_ = 1ErrMessage_=没有数据上传Exit SubEnd IfIf MaxSize > 0 Then 如果限制大小If > MaxSize ThenisErr_ = 2 如果上传的数据超出限制大小ErrMessage_=上传的数据超出限制大小Exit SubEnd IfEnd IfSet Form = () = 1Set File = () = 1Set tStream = ()Set oUpFileStream = () = = () = 0RequestBinDate = iFormEnd = = ChrB (13) & ChrB (10)取得每个项目之间的分隔符sSpace = MidB (RequestBinDate,1, InStrB (1,RequestBinDate,bCrLf)-1)iStart = LenB(sSpace)iFormStart = iStart+2分解项目DoiInfoEnd = InStrB (iFormStart,RequestBinDate,bCrLf & bCrLf)+ = = = tStream, = = = gb2312sInfo = 取得表单项目名称iFormStart = InStrB (iInfoEnd,RequestBinDate,sSpace)-1iFindStart = InStr (22,sInfo,name=,1)+6iFindEnd = InStr (iFindStart,sInfo,,1)sFormName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)如果是文件If InStr (45,sInfo,filename=,1) > 0 ThenSet oFileInfo = new clsFileInfo取得文件属性iFindStart = InStr (iFindEnd,sInfo,filename=,1)+10iFindEnd = InStr (iFindStart,sInfo,&vbCrLf,1)sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart) = GetFileName(sFileName) = GetFilePath(sFileName) = GetFileExt(sFileName)iFindStart = InStr (iFindEnd,sInfo,Content-Type: ,1)+14iFindEnd = InStr (iFindStart,sInfo,vbCr) = Mid(sinfo,iFindStart,iFindEnd-iFindStart) = = iFormStart -iInfoEnd = sFormName,oFileInfoelse如果是表单项目 = = = iInfoEnd tStream, = = = gb2312sFormValue = (sFormName) ThenForm (sFormName) = Form (sFormName) & , & sFormName,sFormValueEnd IfEnd = iFormStart+iStart+2如果到文件尾了就退出Loop Until (iFormStart+2) >= iFormEnd RequestBinDate = Set tStream = NothinGisGetData_=trueend ifEnd Sub保存到文件,自动覆盖已存在的同名文件Public Function SaveToFile(Item,Path)SaveToFile=SaveToFileEx(Item,Path,True)End Function保存到文件,自动设置文件名Public Function AutoSave(Item,Path)AutoSave=SaveToFileEx(Item,Path,false)End Function保存到文件,OVER为真时,自动覆盖已存在的同名文件,否则自动把文件改名保存Private Function SaveToFileEx(Item,Path,Over)On Error Resume NextDim oFileStreamDim tmpPathDim nohack 防黑缓冲isErr=0Set oFileStream = CreateObject () = = = File(Item) oFileStream,File(Item)=split(path,.) 重要修改,防止黑客\0断名伪装!!!tmpPath=nohack(0)&.&nohack(ubound(nohack)) 重要修改,防止黑客\0断名伪装!!!if Over thenif isAllowExt(GetFileExt(tmpPath)) tmpPath,2ElseisErr_=3ErrMessage_=该后缀名的文件不允许上传!End ifElsePath=GetFilePath(Path)if isAllowExt(File(Item)) ()nohack=split(Path&GetNewFileName()&.&File(Item),.) 重要修改,防止黑客\0断名伪装!!!tmpPath=nohack(0)&.&nohack(ubound(nohack)) 重要修改,防止黑客\0断名伪装!!! tmpPathloop Until < PathElseisErr_=3ErrMessage_=该后缀名的文件不允许上传!End ifEnd oFileStream = Nothingif isErr_=3 then SaveToFileEx= else SaveToFileEx=GetFileName(tmpPath)End Function取得文件数据Public Function FileData(Item)isErr_=0if isAllowExt(File(Item)) = File(Item) = (File(Item))ElseisErr_=3ErrMessage_=该后缀名的文件不允许上传!FileData=End ifEnd Function取得文件路径Public function GetFilePath(FullPath)If FullPath <> ThenGetFilePath = Left(FullPath,InStrRev(FullPath, \))ElseGetFilePath = End IfEnd function取得文件名Public Function GetFileName(FullPath)If FullPath <> ThenGetFileName = mid(FullPath,InStrRev(FullPath, \)+1)ElseGetFileName = End IfEnd function取得文件的后缀名Public Function GetFileExt(FullPath)If FullPath <> ThenGetFileExt = LCase(Mid(FullPath,InStrRev(FullPath, .)+1))ElseGetFileExt = End IfEnd function取得一个不重复的序号Public Function GetNewFileName()dim ranNumdim dtNowdtNow=Now()ranNum=int(*rnd)+GetNewFileName=year(dtNow) & right(0 & month(dtNow),2) & right(0 & day(dtNow),2) & right(0 & hour(dtNow),2) & right(0 & minute(dtNow),2) & right(0 & second(dtNow),2) & ranNumEnd FunctionPublic Function isAllowExt(Ext)if NoAllowExt= thenisAllowExt=cbool(InStr(1,;&AllowExt&;,LCase(;&Ext&;)))elseisAllowExt=not CBool(InStr(1,;&NoAllowExt&;,LCase(;&Ext&;)))end ifEnd FunctionEnd Class----------------------------------------------------------------------------------------------------文件属性类Class clsFileInfoDim FormName,FileName,FilePath,FileSize,FileMIME,FileStart,FileExtEnd Class%>

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐