DotText发布照片的问题解决了

博主发现Blog照片上传功能无法使用,错误提示为未找到路径“D:\\”的一部分。起初以为是空间不支持System.IO,找ASP.NET文件上传组件无果。后发现是DotText按照片分类创建目录出错,网上无替代方案,便在web.config中添加选项,让文件不按目录分级保存,解决了照片发布问题。

 

 这个Blog上次我测试的时候发现照片上传的功能不能用,现在改好了。

开始的时候出现这样的错误提示:

异常详细信息: System.IO.DirectoryNotFoundException: 未找到路径“D:\”的一部分。

开始我以为是因为空间不支持System.IO,(我申请的空间支持ISO,文件读写都正常),所以我打算去网上找一个ASP.NET的文件上传组件,可是找来找去没有找到合适的,最后发现一段代码Asp.net 文件上传的实例,抄录如下

 1ExpandedBlockStart.gifContractedBlock.gif<%dot.gif@ page Language = "C#" debug = "true" %>
 2ExpandedBlockStart.gifContractedBlock.gif<%dot.gif@ Import Namespace = "System.IO" %>
 3ExpandedBlockStart.gifContractedBlock.gif<script language = "C#" runat = "server">dot.gif
 4InBlock.gif
 5ExpandedSubBlockStart.gifContractedSubBlock.gifpublic void uploadFile(object sender , EventArgs E) dot.gif{
 6InBlock.gif//检查上传文件不为空
 7ExpandedSubBlockStart.gifContractedSubBlock.gifif(inputFile.PostedFile.ContentLength > 0dot.gif{
 8InBlock.gif//设定上传文件的保存路径
 9InBlock.gifstring strSaveDir = "./upload/";
10InBlock.gifstring strName = inputFile.PostedFile.FileName;
11InBlock.gif//取得文件名(抱括路径)里最后一个"."的索引
12InBlock.gifint intExt = strName.LastIndexOf(".");
13InBlock.gif//取得文件扩展名
14InBlock.gifstring strExt = strName.Substring(intExt);
15InBlock.gif//这里我自动根据日期和文件大小不同为文件命名,确保文件名不重复
16ExpandedSubBlockStart.gifContractedSubBlock.gif/**//**//**//*
17InBlock.gifDateTime datNow = DateTime.Now; 
18ExpandedSubBlockEnd.gifstring strNewName = datNow.DayOfYear.ToString() + inputFile.PostedFile.ContentLength.ToString() + strExt; */

19InBlock.gif//取得文件名(包括路径)里最后一个"\"的索引
20InBlock.gifint intPath = strName.LastIndexOf("\\");
21InBlock.gif//取得文件名(不包括路径)
22InBlock.gifstring strNewName = strName.Substring(intPath); 
23InBlock.gif//保存文件到你所要的目录,这里是IIS根目录下的upload目录.你可以改变.
24InBlock.gif//注意: 我这里用Server.MapPath()取当前文件的绝对目录.在asp.net里"\"必须用"\\"代替
25InBlock.gifinputFile.PostedFile.SaveAs(Server.MapPath(strSaveDir + strNewName)); 
26InBlock.gif//得到这个文件的相关属性:文件名,文件类型,文件大小
27InBlock.giflabelUpResult.Text = "上传成功!";
28InBlock.giflabelFileName.Text = "文件源:" + strName;
29InBlock.giflabelFileExt.Text = "文件类型:" + inputFile.PostedFile.ContentType + "" + strExt + " )";
30InBlock.giflabelFileSize.Text = "文件大小:" + (inputFile.PostedFile.ContentLength / 1024).ToString() + " K Byte(s)";
31ExpandedSubBlockStart.gifContractedSubBlock.gif}
 else dot.gif{
32InBlock.giflabelUpResult.Text = "请选择你要上传的文件!";
33InBlock.giflabelFileName.Text = "";
34InBlock.giflabelFileExt.Text = "";
35InBlock.giflabelFileSize.Text = "";
36ExpandedSubBlockEnd.gif}

37ExpandedBlockEnd.gif}

38None.gif
</script>
39None.gif
40None.gif<html>
41None.gif<head>
42None.gif<title>上传文件</title>
43None.gif</head>
44None.gif<body>
45None.gif<div align="center">
46None.gif
47None.gif<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#eeeeee" id="AutoNumber1">
48None.gif<form id="formFile" method="post" action="" enctype="multipart/form-data" runat="server">
49None.gif<tr>
50None.gif<td align="center">
51None.gif<input type="file" id="inputFile" name="inputFile" runat="server" size="64">
52None.gif</td>
53None.gif</tr>
54None.gif<tr>
55None.gif<td align="center">
56None.gif<input type="button" value="Upload" OnServerClick="uploadFile" id="Button1" name="Button1" runat="server">
57None.gif</td>
58None.gif</tr>
59None.gif<tr>
60None.gif<td align="center">
61None.gif<asp:Label id="labelUpResult" runat="server" text="" font-bold="True" forecolor="#FF0000"/><br>
62None.gif<asp:Label id="labelFileName" runat="server" text="" font-bold="True" forecolor="#FF0000"/><br>
63None.gif<asp:Label id="labelFileExt" runat="server" text="" font-bold="True" forecolor="#FF0000"/><br>
64None.gif<asp:Label id="labelFileSize" runat="server" text="" font-bold="True" forecolor="#FF0000"/><br>
65None.gif</td>
66None.gif</tr>
67None.gif</form>
68None.gif</table>
69None.gif
70None.gif</div>
71None.gif</body>
72None.gif</html>
73None.gif

可是我在应用代码的时候才发现,其实根本不是这个问题,而是DotText根据每一个照片分类创建目录的时候出现的错误,在网上有一篇相关的解释 关于未找到路径“D:\”的一部分,同样,内容摘抄如下:

 1None.gif在实际的应用中,我们发现很多的Asp.NET空间提供商并没有相关的经验,而依然停留在Asp的管理模式中。
 2None.gif其中最常见,就是目录权限的配置上:他们大多数沿习了Asp的经验,给用户所在目录赋于所有权限,然后将磁盘根目录的相关权限全部去掉。
 3None.gif这样以来就导致一个问题,就是Asp.NET中的 Server.MapPath 无法使用,这个方法却是创建目录或文件所必须的,如下面创建目录的代码:
 4None.gifDirectory.CreateDirectory(Server.MapPath("Test"));
 5None.gif这是一个非常简单的操作:在用户的当前目录下创建一个名为 "Test" 的子目录。
 6None.gif然后就是这样一个操作在没有正确配置的空间就会无法运行,它会提示为什么会有这样的错误呢?
 7None.gif原因就是 Server.MapPath() 这个方法,这个方法是让一个相对路径转为绝对路径,而在转换的过程序中,.NET框架需要得到当前硬盘的一些属性,如盘符等,而这个时候,空间提供商却将.Net用户对磁盘根目录的权限全部拒绝,从而导致程序无法正常运行。
 8None.gif
 9None.gif有个时候,空间提供商会说:"你为什么要用绝对路径,而不使用相对路径呢?"
10None.gif这是行不通的,如果你这样程序:Directory.CreateDirectory("Test");
11None.gif系统在运行的时候,并不是象你想像的那样,会自动在用户的当前目录下创建目录,而会尝试在 "C:\WINNT\System32" 路径下创建目录 (其中的C:\WINNT表示你的操作系统安装的路径)

而这个问题我在网上没有找到替代的解决方案,所以我打算索性不创建目录算了,,所以我在web.config中添加了控制是否分级创建目录的选项
              <AllowCreateFolder>false</AllowCreateFolder>

然后在获取文件保存路径的方法上做如下手脚:

 1None.gif        public static string LocalGalleryFilePath(HttpContext context, int categoryid)
 2ExpandedBlockStart.gifContractedBlock.gif        dot.gif{
 3InBlock.gif            if(Config.Settings.AllowCreateFolder)
 4InBlock.gif                return string.Format("{0}\\{1}\\",Config.CurrentBlog(context).ImageDirectory,categoryid);
 5InBlock.gif            else
 6InBlock.gif                return string.Format("{0}\\",Config.CurrentBlog(context).ImageDirectory);
 7ExpandedBlockEnd.gif        }

 8None.gif
 9None.gif        public static string HttpGalleryFilePath(HttpContext context, int categoryid)
10ExpandedBlockStart.gifContractedBlock.gif        dot.gif{
11InBlock.gif            if(Config.Settings.AllowCreateFolder)
12InBlock.gif                return string.Format("{0}{1}/",Config.CurrentBlog(context).ImagePath,categoryid);
13InBlock.gif            else
14InBlock.gif                return string.Format("{0}",Config.CurrentBlog(context).ImagePath);
15ExpandedBlockEnd.gif        }

这样就可以让DotText将文件不按照目录分级保存,就可以成功的发布照片了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值