c#asp.net FTP错误 [英] c# asp.net FTP Error

查看:90
本文介绍了c#asp.net FTP错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试从ftp(有权访问)下载一个项目时,我得到System.NotSupportedException:给定路径的格式不支持。在System.Security.Util.StringExpressionSet。上传似乎工作正常,完成类似地,我将发布以下两个功能:

  private void下载(string filePath,string fileName)
{
FtpWebRequest reqFTP;
try
{
// filePath =<<要创建文件的完整路径。 >>
// fileName =<<要创建的文件的名称不要在FTP服务器上命名。名称()>>
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(文件名);
string uri =ftp://+ ftpServerIP +/+ fileInf.Name;
FtpWebRequest reqFTP;
//从Uri中创建FtpWebRequest对象
reqFTP =(FtpWebRequest)FtpWebRequest.Create(new Uri(ftp://+ ftpServerIP +/+ fileInf.Name));
//提供WebPermission Credintials
reqFTP.Credentials = new NetworkCredential(ftpUserID,ftpPassword);
//默认情况下,KeepAlive为真,执行命令后控件连接未关闭
//。
reqFTP.KeepAlive = false;
//指定要执行的命令。
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
//指定数据传输类型。
reqFTP.UseBinary = true;
//通知服务器上传文件的大小
reqFTP.ContentLength = fileInf.Length;
//缓冲区大小设置为2kb
int buffLength = 2048;
byte [] buff = new byte [buffLength];
int contentLen;
//打开一个文件流(System.IO.FileStream)来读取要上传的文件
FileStream fs = fileInf.OpenRead();
try
{
//要上传的文件的流被写入
Stream strm = reqFTP.GetRequestStream();
//从文件流2kb一次读取
contentLen = fs.Read(buff,0,buffLength);
//直到流内容结束
while(contentLen!= 0)
{
//将内容从文件流写入FTP上传流
strm.Write (buff,0,contentLen);
contentLen = fs.Read(buff,0,buffLength);
}
//关闭文件流和请求流
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;
下载(FullServer,LbxServer.SelectedValue);
}

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

感谢大家对此事有任何帮助。

解决方案

我想你会发现 ftp:// myservername 是一个无效的方案新的 FileStream 。请注意,您的 FileStream 表示本地目标,而不是远程文件。



如果您打算下载远程文件到您的本地系统, filePath 应该引用本地网络上的一个文件夹(例如, C:\temp \\somecomputer\share 等)


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.

解决方案

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.)

这篇关于c#asp.net FTP错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆