如何在没有任何用户交互的情况下对服务器进行文件传输?

OrE*_*lse 8 c# vb.net asp.net ftp ftpwebrequest

在我的场景中,用户可以上传zip文件 a.example.com

我很乐意创建一个"守护进程",它会在指定的时间间隔内移动 - 将用户上传的任何zip文件传输a.example.comb.example.com

从我目前收集的信息,

  1. 守护进程将是.ashx通用处理程序.
  2. 将通过plesk cron作业以指定的时间间隔触发守护程序
  3. 守护进程(感谢SLaks)将包含两个FtpWebRequest(一个用于读取,一个用于写入).

所以问题是如何实施第3步?

  • 我是否必须将整个文件读入memory()数组并尝试将其写入b.example.com
  • 我怎么能写出我读到的信息b.example.com
  • 我可以同时执行文件的读写吗?

不,我不是要求完整的代码,我只能弄清楚,如何在没有用户交互的情况下即时执行读写.

我的意思是我可以从本地下载文件a.example.com并上传它,b.example.com但这不是重点.

jga*_*fin 8

这是另一个解决方案:

  1. 让服务器A中的ASP.Net作为常规文件上载接收文件并将其存储在目录XXX中
  2. 在服务器A中有一个Windows服务,它检查目录XXX是否有新文件.
  3. 让窗口服务使用将文件上传到服务器B. HttpWebRequest
  4. 让服务器B使用常规的ASP.Net文件上传页面接收文件.

链接:

你需要解决的问题:

  1. 如何确定要上传到服务器B的文件.我会用Directory.GetFilesa Timer来查找新文件而不是使用FileSystemWatcher.您需要能够检查以前是否已上传文件(删除,重命名,检查数据库或任何适合您需要的文件).

  2. 在服务器B上进行身份验证,以便只有您可以上传文件.


小智 5

要回答您的问题 - 是的,您可以同时读取和写入文件.

您可以打开FTPWebRequestServerA和FTPWebRequestServerB.在FTPWebRequest服务器A上,您将请求该文件,并获取ResponseStream.一旦你有了ResponseStream,你将一次读取一块字节,并将该字节块写入serverB RequestStream.

您将使用的唯一内存是byte[]读/写循环中的缓冲区.请记住,虽然底层实现FTPWebRequest将在返回响应流之前下载完整的FTP文件.

同样,FTPWebRequest在写完所有字节之前,您无法发送上传新文件.实际上,操作将同步进行.GetResponse在完整文件可用之前,您将调用哪些不会返回,然后才能"上传"新文件.

参考文献:

的FtpWebRequest