c# asp.net FTP Error

2019-04-17 08:34发布

问题:

I get "System.NotSupportedException: The given path's format is not supported. at System.Security.Util.StringExpressionSet" when trying to download an item from an ftp(which have access to). The upload seems to work fine and is done similarly I'll post both functions below:

private void Download(string filePath, string fileName)
    {
        FtpWebRequest reqFTP;
        try
        {
            //filePath = <<The full path where the file is to be created. the>>, 
            //fileName = <<Name of the file to be createdNeed not name on FTP server. name name()>>
            Label1.Text = filePath + "/" + fileName;
            FileStream outputStream = new FileStream(filePath + "/" + fileName, FileMode.Create);
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new
            Uri("ftp://" + ftpServerIP + "/" + fileName));
            reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
            reqFTP.UseBinary = true;
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
            Stream ftpStream = response.GetResponseStream();
            long cl = response.ContentLength;
            int bufferSize = 2048;
            int readCount;
            byte[] buffer = new byte[bufferSize];

            readCount = ftpStream.Read(buffer, 0, bufferSize);
            while (readCount > 0)
            {
                outputStream.Write(buffer, 0, readCount);
                readCount = ftpStream.Read(buffer, 0, bufferSize);
            }

            ftpStream.Close();
            outputStream.Close();
            response.Close();
        }
        catch (Exception ex)
        {
            Label1.Text = ex.ToString();
        }
    }




public void Upload(string filename)
    {
        FileInfo fileInf = new FileInfo(filename);
        string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
        FtpWebRequest reqFTP;
        // Create FtpWebRequest object from the Uri provided
        reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP +"/" + fileInf.Name));
        // Provide the WebPermission Credintials
        reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
        // By default KeepAlive is true, where the control connection is not closed
        // after a command is executed.
        reqFTP.KeepAlive = false;
        // Specify the command to be executed.
        reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
        // Specify the data transfer type.
        reqFTP.UseBinary = true;
        // Notify the server about the size of the uploaded file
        reqFTP.ContentLength = fileInf.Length;
        // The buffer size is set to 2kb
        int buffLength = 2048;
        byte[] buff = new byte[buffLength];
        int contentLen;
        // Opens a file stream (System.IO.FileStream) to read the file to be uploaded
        FileStream fs = fileInf.OpenRead();
        try
        {
            // Stream to which the file to be upload is written
            Stream strm = reqFTP.GetRequestStream();
            // Read from the file stream 2kb at a time
            contentLen = fs.Read(buff, 0, buffLength);
            // Till Stream content ends
            while (contentLen != 0)
            {
                // Write Content from the file stream to the FTP Upload Stream
                strm.Write(buff, 0, contentLen);
                contentLen = fs.Read(buff, 0, buffLength);
            }
            // Close the file stream and the Request Stream
            strm.Close();
            fs.Close();
        }
        catch (Exception ex)
        {
            //MessageBox.Show(ex.Message, "Upload Error");
        }
    }

and these are the function calls

protected void btnDownload_Click(object sender, EventArgs e)
    {
        string FullServer = "ftp://" + ftpServerIP;
        Download(FullServer, LbxServer.SelectedValue);
    }

    protected void btnUpload_Click(object sender, EventArgs e)
    {
        Upload(LbxLocal.SelectedValue);
    }

Thank you all for any help on this matter.

回答1:

I think you'll find that ftp://myservername is an invalid scheme for a new FileStream. Note that your FileStream represents the local target, not the remote file.

If your intent is to download a remote file to your local system, filePath should refer to a folder on your local network (e.g., C:\temp or \\somecomputer\share, etc.)