繁体   English   中英

使用ftp上传文件

[英]Upload file using ftp

我在IIS服务器上使用“网站”面板。 我想使用ftp上传文件

我使用此代码:

try
{
     WebClient webClient = new WebClient();

     OpenFileDialog fd = new OpenFileDialog();
     fd.ShowDialog();

     MessageBox.Show(fd.FileName);

     webClient.UploadFileTaskAsync(new Uri("ftp://" + "username" + ":" +"pass" +"@" + "address/" + "name.ext"), fd.FileName);

 }
 catch (Exception ex)
 { 
     MessageBox.Show(ex.Message);
 }

此代码运行无错误。 当我使用网站面板的文件管理器时,创建了一个文件“ Name.ext”,但该文件大小为0 KB。 为什么? 我有什么问题?

我确信Windows防火墙允许我这样做。

更新:我正在使用UploadFileTask和UploadFile(不同步),但结果与async :(

您的异常可能会从WebClient.UploadFileTaskAsync返回的未等待的Task中吞下。 您应该await任务,这样catch块将检测到潜在异常,因为它会传播到等待的代码行:

public async Task UploadFileByFtpAsync()
{
   try
   {
       WebClient webClient = new WebClient();

       OpenFileDialog fd = new OpenFileDialog();
       fd.ShowDialog();

       MessageBox.Show(fd.FileName);

       Task<byte[]> response = await webClient.UploadFileTaskAsync(new Uri("ftp://" + "username" + ":" +"pass" +"@" + "address/" + "name.ext"), fd.FileName);

       // You might want to validate the response status code is valid here
    }
    catch (Exception ex)
    { 
        MessageBox.Show(ex.Message);
        // Do useful exception handling here
    }
}

编辑

正如我在评论中所说,请检查response变量,它包含您的上传尝试的响应,该响应可能失败了。

编辑2

看来问题出在web / ftp请求的KeepAlive属性。 “基础连接已关闭”中有一个可接受的答案:服务器违反了协议。 FTP这里

我的第一个想法是您没有等待Async调用,因此正在运行此代码的任何进程或线程都可能在UploadFileTaskAsync调用实际完成之前结束。

尝试将try块的最后一次调用更改为

await webClient.UploadFileTaskAsync(new Uri("ftp://" + "username" + ":" +"pass" +"@" + "address/" + "name.ext"), fd.FileName);

您可能还希望检查调用的返回值:

var result = await webClient.UploadFileTaskAsync(new Uri("ftp://" + "username" + ":" +"pass" +"@" + "address/" + "name.ext"), fd.FileName);

结果对象是服务器响应的byte[]

我建议使用本机的FtpWebRequest类上载文件。

     try
     {
        OpenFileDialog fd = new OpenFileDialog();
        fd.ShowDialog();
        MessageBox.Show(fd.FileName);

        FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("ftp://address/" + fd.FileName);
        request.Method = WebRequestMethods.Ftp.UploadFile;
        request.Credentials = new NetworkCredential("username", "pass");
        request.UsePassive = true;
        request.UseBinary = true;
        request.KeepAlive = false;

        FileStream stream = File.OpenRead(fd.FileName);
        byte[] buffer = new byte[stream.Length];

        stream.Read(buffer, 0, buffer.Length);
        stream.Close();

        Stream reqStream = request.GetRequestStream();
        reqStream.Write(buffer, 0, buffer.Length);
        reqStream.Close();
       }
    catch (Exception ex)
    { MessageBox.Show(ex.Message);


    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM