ASP.NET上传服务器出错
出错提示: 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误。
------------
解决方案:在IIS中先建立虚拟目录,如果没有创建为应用程序 在网站对应的虚拟目录上右键,选属性,然后在应用程序名后点创建。如还无法解决,则在IIS中右击WebSite,点“属性”,在“目录”的“应用程序设置”中,点“删除”删除“应用程序名”就可以了。如果在这样以后,还出现:“在应用程序级别之外使用注册为allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误。”这样的错误,在Webconfig文件中删除<authentication mode="Windows" />结点就可以了。
若IIS中没有应用程序名,先创建,若还不行把C:\WINDOWS\MicrosoftNET\work\v2050727\CONFIG\machineconfig中的所有allowDefinition="MachineToApplication"改为allowDefinition="Everywhere"
解决的关键是:把你的虚拟目录指向webconfig所在在文件夹,因为 webconfig 的某些配置节只能出现在网站的虚拟目录跟目录中。net 下用使用IIS建立虚拟目录是跟ASP下不同的,一定要指向文件夹的的跟目录
=========================================================================
allowDefinition="MachineToApplication"
想利用以前看到的"使用webconfig设置不同目录下的配置”,来玩一下多个webconfig的继承
问题是首先这样引出来的:
把一些原本放在根目录下的aspx文件,放到AuthFolder中,在其中加一个webconfig,根目录下不再配置<authentication><authorization>;AuthFolder中需要该两项的详细、安全的配置
编译通过,但浏览时提示"未能加载……(某个类)”
紧急搜索了一些论坛,发现对于"未能加载……”的问题几乎没有作出答案,回复不过两种:一,重新生成一下;二,建虚拟目录;三,在AuthFolder中新建页面,然后拷贝代码,而不是直接拷贝页面到AuthFolder中
然后看到的就是,继续的回复里"仍然没有解决……”的抱怨
研究一下
1,webconfig是继承关系,根继承于machinconfig;machinconfig中有一些规定webconfig如何设置的东西,即哪些配置能够在webconfig中配置;
默认的:authentication、sessionState的配置只能发生在:虚拟目录、应用程序中(由machineconfig中allowDefinition="MachineToApplication"来定义)
2,Form验证是否必须将文件夹在IIS中配置成Application?
3,将子目录AuthFolder配置成Application后,里面的页面就会发生"未能加载……”(和搜索的结果相反:我这里是配置为虚拟目录后,才发生此现象??)的问题;不配置,则不能使用webconfig配置AuthFolder目录下的<authentication>;
试了几个方法:
将fileupload中的文件保存到服务器端的一个临时文件夹,在服务器端运行一个程序将ajpg转换为bgif。这时的c:\bgif在服务器上,可以直接运行更改代码改变存盘的路径和文件名。
dim strHtmlFileName as string =ServerMapPath("/images/sohugif")
dim proc as SystemDiagnosticsProcess = new SystemDiagnosticsProcess()
procEnableRaisingEvents = false
dim strwvWareDirectory as string = ServerMapPath("/")
procStartInfoFileName = strwvWareDirectory + "gif2swfexe"
procStartInfoArguments = strHtmlFileName
procStartInfoCreateNoWindow = true
procStart()
procWaitForExit()
使用调用,远程上传,上传至远程,如果你有两台服务器,一台是网站所在的服务器,另外一台是储存文件的提供下载或展示的网站,源码,用网盘源码或者类似DZ论坛都有提供上传至远程服务器,asp源码有很多CMS都支持远程附件上传,还有很多网盘都提供接口。
希望是我理解的这样。如果不是请追问
#region 文件上传(普通上传不生成文件夹)
/// <summary>
/// 文件上传(普通上传不生成文件夹)
/// </summary>
/// <param name="hifile">上传控件</param>
/// <param name="strAbsolutePath">绝对路径</param>
/// <param name="TYPE">文件类型(在WebConfig中配置)</param>
/// <param name="FileSize">文件大小单位:Mb(在WebConfig中配置)</param>
/// <returns></returns>
public string SaveFile(HtmlInputFile hifile, string strAbsolutePath, string TYPE, string FileSize)
{
bool filetype = false;
string /文件的完整路径/strOldFilePath = "", /文件类型/strExtension = "", /新文件名称/strNewFileName = "";
//如果上传文件的文件名不为空
if (hifilePostedFileFileName != stringEmpty)
{
strOldFilePath = hifilePostedFileFileName;//文件的完整路径
Path = strAbsolutePath;//服务器路径
//取得上传文件的扩展名
strExtension = strOldFilePathSubstring(strOldFilePathLastIndexOf("") + 1);
file_type = strExtension;
//文件大小单位Mb
double sizes = hifilePostedFileContentLength / (double)10240 / (double)10240;//文件大小
thisfile_size = sizesToString("f4");//文件大小单位Mb精确到小数点后4位
//文件格式
string[] types = TYPESplit('|');//文件格式集合
for (int i = 0; i < typesLength; i++)
{
if (types[i]ToString()Trim()ToLower() == strExtensionTrim()ToLower())
{ filetype = true; break; }
else { filetype = false; }
}
if (filetype)//判断文件类型是否错误
{
if (sizes < ConvertToDouble(FileSize))
{
//文件上传后的命名
strNewFileName = GetUniqueString() + "" + strExtension;
file_name = strNewFileName;
if (!DirectoryExists(strAbsolutePath))//文件的完整路径
{
DirectoryCreateDirectory(strAbsolutePath);//按月份创建文件夹
}
hifilePostedFileSaveAs(strAbsolutePath + strNewFileName);//保存文件
return "文件上传成功!" + file_name;
}
else
{ return "文件大小不能超过" + FileSize + "00Mb!"; }
}
else
{ return "文件格式错误!"; }
}
else
{ return "请选择要上传的文件!"; }
}
1、服务器安装IIS
2、安装framework
3、注册ASPNET到IIS 如果是framework20的话
\WINDOWS\MicrosoftNET\Framework\v2050727\aspnet_regiisexe -r
4、把你的程序拷到服务器上,并创建虚拟目录
你应该说明一下,发生了什么错误
FileInfo file = new FileInfo( name ); 这个错误是严重的,
这个服务器可没有这个file,
fileLength可以改成 FileUpload1PostedFileContentLength
如果你要获取没有路径的文件名
你可以string filename = PathGetFileName(sfPostedFileFileName);
如果你要获取文件的扩展名可以
string type = PathGetExtension(sfPostedFileFileName);//带点的
你在本地可以是因为,
FileInfo file = new FileInfo( name ); 这里的name是一个有路径的名字,因此,file为本地上一个文件的句柄(这个name是你在上传框里填写的)
而到了服务器上是根本没有这个name所代表的文件,因此你所有的操作都会失败,因file代表的是一个根本不存在的文件,
因此你应该改成这样
if ( Session["loginname"] != null )
{
string loginname = Session["loginname"]ToString();
int allowlength = 1024 1024 10;//限制文件大小
string filename = PathGetFileName( FileUpload1PostedFileFileName );
if ( FileUpload1HasFile ) // 有上传文件
{
string size = FileUpload1PostedFileContentLengthToString(); //获取已上传文件夹的大小
string type = PathGetExtension( FileUpload1PostedFileFileName ); //得到文件的后缀
string fullpath = ServerMapPath( "~/UserDocument/" + loginname + "/Picture/" );//文件的保存路径
string vsnewname = SystemDateTimeNowToString( "yyyyMMddHHmm_" );//声称文件名,防止重复
path = "UserDocument/" + loginname + "/Picture/" + vsnewname;
if ( FileUpload1PostedFileContentLength < allowlength )
{
if ( type == "bmp" || type == "png" || type == "jpg" || type == "gif" || type == "BMP" || type == "PNG" || type == "JPG" || type == "GIF" )
{
if ( !DirectoryExists( fullpath ) )//判断上传文件夹是否存在,若不存在,则创建
{
//创建文件夹
DirectoryCreateDirectory( fullpath );
FileUpload1PostedFileSaveAs( fullpath + vsnewname + filename );
}
else
{
FileUpload1PostedFileSaveAs( fullpath + vsnewname + filename );
}
}
else
{
PageRegisterStartupScript( "", "<script>alert('上传文件格式错误!');historygo(-1);</script>" );
}
}
else
{
PageRegisterStartupScript( "", "<script>alert('上传文件太大!');historygo(-1);</script>" );
}
}
else
{
PageRegisterStartupScript( "", "<script>alert('请上传文件!');historygo(-1);</script>" );
}
}
分多的话,我不介意你多加些给我
0条评论