C# 无法在asp.net中获取上载的文件路径
我想将文件保存到特定位置,并根据需要创建一些文件夹。所以我写了下面的代码C# 无法在asp.net中获取上载的文件路径,c#,asp.net,file-upload,C#,Asp.net,File Upload,我想将文件保存到特定位置,并根据需要创建一些文件夹。所以我写了下面的代码 public string CreateFilePath(string addedFolderName) { string folderPath = ConfigurationManager.AppSettings["DocDirectory"].ToString(); string FileUplPath = folderPath + "\\" + addedFolderName
public string CreateFilePath(string addedFolderName)
{
string folderPath = ConfigurationManager.AppSettings["DocDirectory"].ToString();
string FileUplPath = folderPath + "\\" + addedFolderName + "\\";
if (!Directory.Exists(FileUplPath))
{
Directory.CreateDirectory(FileUplPath);
}
flUploadDocs.SaveAs(FileUplPath + Path.GetFileName(flUploadDocs.FileName));
return folderPath;
}
但是我无法在这里获取文件路径。我得到的是空值
在
Path.GetFileName(flUploadDocs.FileName)
<asp:FileUpload ID="flUploadDocs" runat="server" />
Path.GetFileName(flUploadDocs.FileName)
请指出此处的错误。Path.GetFileName()
返回指定路径字符串的文件名和扩展名
如果im正确,则只填写文件名,而不是目录+名称
Path.GetFileName(flUploadDocs.FileName)
可能的解决办法
Path.GetFileName(FileUplPath+flUploadDocs.FileName)
尽管我很困惑,为什么在保存路径后还要再次尝试检索路径 问题在于Web服务没有fileupload数据。以下是我们扩展对话的完整代码:
[WebMethod]
public static string InsertUpdateMWSiteData(MWInsertUpdateFields MWInsertUpdateFields)
{
string strInsertUpdateMWInfo = "";
try
{
Dashboard dshb = new Dashboard();
dshb.CreateFilePath(MWInsertUpdateFields.SapID + "_" + MWInsertUpdateFields.CandidateID);
strInsertUpdateMWInfo = CommonDB.InsertUpdateMWSiteInfo(MWInsertUpdateFields);
}
catch (Exception)
{
throw;
}
return strInsertUpdateMWInfo;
}
public string CreateFilePath(string addedFolderName)
{
string folderPath = ConfigurationManager.AppSettings["DocDirectory"].ToString();
string FileUplPath = folderPath + "\\" + addedFolderName + "\\";
if (!Directory.Exists(FileUplPath))
{
Directory.CreateDirectory(FileUplPath);
}
if (flUploadDoc.HasFile == true)
{
string strFilename = Path.GetFileName(flUploadDoc.FileName);
flUploadDoc.SaveAs(FileUplPath + Path.GetFileName(flUploadDoc.PostedFile.FileName));
}
return folderPath;
}
问题是,上传文件后,会向另一个程序实例中承载的webmethod发送请求。此Webmethod检查自己的实例中的fileupload控件和数据,但找不到它,因为它位于不同的实例中。这就是为什么即使在对.HasFile()进行健全性检查时,fileupload控件也会返回null
一种解决方案是将数据传递给Web服务。例如,可以将数据作为字节[]传递给webmethod,然后在webservice端将其重新转换回原始文件类型。完成此过程后,将文件保存到本地文件系统。为此,您可能需要传递扩展名类型和文件名
您可能还需要添加一些验证,以将接受的文件类型限制为最常见的文件类型,如图像、.doc、.excel,以及库中支持转换的任何文件类型
如果您想使用upload控件将文件直接保存到文件系统,您可以这样做,但必须排除webservice步骤
有关详细信息,请参见聊天室中的讨论。请更具体一些。它在哪里说空?在Directory.CreateDirectory(FileUplPath);?在flUploadDocs.SaveAs(FileUplPath+Path.GetFileName(flUploadDocs.FileName))中;?作为回报,folderPath;?文件上传是否返回空值?@TylerSigi:我在
Path.GetFileName(flUploadDocs.FileName)
处得到空值,我将在我的计算机上进行测试,但如果您仅用flUploadDocs.FileName替换Path.GetFileName(flUploadDocs.FileName),会发生什么情况?@TylerSigi:相同,得到空值。。这是因为我在静态方法中调用了该函数吗?就像一个健全性检查一样,flUploadDocs.HasFile是否返回true?