c # asp.net Ошибка FTP - PullRequest
       21

c # asp.net Ошибка FTP

0 голосов
/ 31 августа 2010

Я получаю «System.NotSupportedException: формат данного пути не поддерживается. При System.Security.Util.StringExpressionSet» при попытке загрузить элемент из ftp (к которому есть доступ) Кажется, загрузка работает нормально и выполняется аналогично. Я опубликую обе функции ниже:

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");
        }
    }

и это вызовы функций

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);
    }

Спасибо всем за помощь в этом вопросе.

1 Ответ

1 голос
/ 31 августа 2010

Я думаю, вы обнаружите, что ftp://myservername является недопустимой схемой для нового FileStream.Обратите внимание, что FileStream представляет локальную цель, а не удаленный файл.

Если вы хотите загрузить удаленный файл в локальную систему, filePath должен указывать на папку в вашей локальной сети (например,, C:\temp или \\somecomputer\share и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...