Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在asp.net中获取上载的文件路径_C#_Asp.net_File Upload - Fatal编程技术网

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?