【问题标题】:ASP .NET invalid pathASP .NET 无效路径
【发布时间】:2010-11-03 20:55:54
【问题描述】:

我有一个网页,它使用 fileupload 控件提示用户输入 excel 文件。然后它所做的是使用 OleDbConnection 将文件读入数据表,然后使用该数据运行其他代码。当我在 Visual Studio 中测试时,它工作正常。例如,我可以查找一个文件“g:\myfiles\upldtest.xls”,它会找到该文件,读取它并且代码可以工作。当我尝试在我们的 Web 服务器上运行它时,当它尝试创建 OleDBConnection 时出现错误,提示它正在尝试创建 OleDbConnection 并且路径 'g:\myfiles\upldtest.xls' 无效。

我尝试使用 ManagementObjectSearcher 将连接字符串路径转换为 ​​UNC(\\MyDataServer\myfiles 而不是 g:\myfiles)。当我测试它时,它显示了正确的路径,但是当我将页面上传到 Web 服务器时,我仍然得到路径 'g:\myfiles\upldtest.xls' 无效。

我用来确定所需文件名的代码是这样的

字符串 tname = FileUpload1.PostedFile.FileName; //文件名和路径

字符串 gname = tname.Substring(tname.LastIndexOf("\\") + 1); //路径名

任何想法我错过了什么?我的合同要求我使用 VS2005 和 .NET 框架 2.0,所以我不能使用任何更新的东西。提前感谢您的帮助。

【问题讨论】:

  • 我不这么认为,我在服务器上遇到了故障,我认为我有权限,除非...这是 IIS 6 的问题?

标签: asp.net c#-2.0


【解决方案1】:

HttpPostedFile.FileName 返回客户端计算机上文件的完全限定名称​​

您需要调用SaveAs() 才能将文件实际保存在服务器上:

using System.IO;

string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);
string filepath = Path.Combine(@"X:\Your\Own\Upload\Folder", filename);
FileUpload1.PostedFile.SaveAs(filepath);

// Now use `filepath` as your data source.

IIS 可能已经将文件写入临时位置以节省内存,但由于您不能(也不应该)访问该位置,因此没有区别。

【讨论】:

  • 抱歉延迟回复,感谢回复。我无法将文件传输到服务器上。我需要能够将文件读入内存并以这种方式使用它。大多数运行它的最终用户都没有将文件上传到服务器的底层权限。
【解决方案2】:

您还应该注意跨浏览器问题。 IE 在文件上传时将整个路径发送到服务器,而 Firefox/Chrome 则不会。

【讨论】:

  • 无论好坏,我们只使用IE。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 2016-12-24
  • 1970-01-01
  • 2019-01-12
相关资源
最近更新 更多