6

需求,每晚上传1500张jpg图片,下面的代码多次打开和关闭一个连接,想知道有没有更好的方法。

...这是一个代码片段,所以这里有在别处定义的变量

Dim picClsRequest = DirectCast(System.Net.WebRequest.Create(ftpImagePath), System.Net.FtpWebRequest)
Dim picClsStream As System.IO.Stream

Dim picCount As Integer = 0
For i = 1 To picPath.Count - 1
    picCount = picCount + 1
    log("Sending picture (" & picCount & " of " & picPath.Count & "):" & picDir & "/" & picPath(i))
    picClsRequest = DirectCast(System.Net.WebRequest.Create(ftpImagePath & "/" & picPath(i)), System.Net.FtpWebRequest)
    picClsRequest.Credentials = New System.Net.NetworkCredential(ftpUsername, ftpPassword)
    picClsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile
    picClsRequest.UseBinary = True
    picClsStream = picClsRequest.GetRequestStream()

    bFile = System.IO.File.ReadAllBytes(picDir & "/" & picPath(i))
    picClsStream.Write(bFile, 0, bFile.Length)
    picClsStream.Close()

Next

一些评论:

是的,我知道 picCount 是多余的……那是深夜。

ftpImagePath, picDir, ftpUsername, ftpPassword 都是变量

是的,这是未加密的

此代码工作正常,我正在寻找优化

相关问题:使用 .NET FTP 上传多个文件而不断开连接

4

4 回答 4

5

如果您想一次发送多个文件(如果顺序不重要),您可以查看异步发送文件。查看各种 Begin* 和 End* 方法,例如FtpWebRequest.BeginGetResponseFtpWebRequest.EndGetResponse等。

此外,您可以查看FtpWebRequest.KeepAlive属性,该属性用于保持连接打开/缓存以供重用。

嗯,您也可以尝试创建一个巨大的 tar 文件,然后通过一个连接将单个文件发送到一个流中;)

于 2010-03-05T05:44:42.403 回答
0

使用一些第三方 FTP 客户端库怎么样?他们中的大多数人不会试图隐藏 FTP 不是无状态协议(与 FtpWebRequest 不同)。

以下代码使用我们的Rebex FTP/SSL,但还有许多其他代码。

// create client, connect and log in 
Ftp client = new Ftp();
client.Connect("ftp.example.org");
client.Login("username", "password");
client.ChangeDirectory("/ftp/target/fir");

foreach (string localPath in picPath)
{
   client.PutFile(localPath, Path.GetFileName(localPath));
}

client.Disconnect();

或者(如果您所有的源文件都在同一个文件夹中):

// create client, connect and log in 
Ftp client = new Ftp();
client.Connect("ftp.example.org");
client.Login("username", "password");

client.PutFiles(
  @"c:\localPath\*", 
  "/remote/path",
  FtpBatchTransferOptions.Recursive,
  FtpActionOnExistingFiles.OverwriteAll);

client.Disconnect();
于 2010-07-02T14:19:47.437 回答
0

使用多线程 - 一次打开 3-4 个 FTP 连接并并行上传文件。

于 2010-03-05T15:48:26.117 回答
0

是否可以将文件压缩成不同的束,例如创建 15 个 zip 文件,每个文件有 100 张图像,然后上传 zip,这样会更快、更高效。

有免费的库可以动态创建 zip(例如 sharpZipLib)

于 2010-03-05T06:17:13.070 回答