从路径访问和上传文件

本文关键字:文件 路径 访问 | 更新日期: 2023-09-27 17:56:01

我有一个用户可以上传文件的页面。我不保存文件 - 我使用流并将它们上传到第三方服务器。我确实将路径存储在数据库中。

我现在需要将这些文件上传到其他服务器。因此,我在数据库中有一个路径,例如:

J:'Projects'Commercial'somedoc.docx

我现在需要允许用户选择该位置的文件并将其上传到另一台服务器。我不能在控件中使用路径 - 因为您无法设置此类控件的值。

我将在.aspx页面上显示文件路径列表,供用户选择他们需要上传的文件(再次,但到不同的服务器)。

当我只有一个字符串作为路径时,我如何上传文件?

通常我会有:

HttpFileCollection hfc = Request.Files;
HttpPostedFile hpf = hfc[0];
using (Stream fx = hpf.InputStream)
{
//send the stream to a remote server here
}

但我没有发布的文件可以使用,我只有一条路径。

从路径访问和上传文件

"

需要上传(再次,但到不同的服务器)"。意味着您必须从一台服务器复制到另一台服务器。所以我认为你必须使用FTP复制。

下面的代码可能会对您有所帮助。代码未经过测试。请尝试

string CompleteDPath = "";
CompleteDPath = "ftp://1234.1234.12.13/Projects/Commercial";

string UName = "";
string PWD = "";
UName = "Administrator";
PWD = "12345";

WebRequest reqObj = WebRequest.Create(CompleteDPath + "somedoc.docx");
reqObj.Method = WebRequestMethods.Ftp.UploadFile;
reqObj.Credentials = new NetworkCredential(UName, PWD);
FileStream streamObj = System.IO.File.OpenRead(physical path + "somedoc.docx");
byte[] buffer = new byte[streamObj.Length + 1];
streamObj.Read(buffer, 0, buffer.Length);
streamObj.Close();
streamObj = null;
reqObj.GetRequestStream().Write(buffer, 0, buffer.Length);
reqObj = null;

根据您的评论...

是的,他们已经将大量不同的文件上传到服务器 A,现在,几周后,需要查看他们上传到服务器 A 的文件列表并将其上传到服务器 B。 (我无法从服务器 A 复制到服务器 B,因为我无法访问它们

正如您已经说过的,您无法在用户计算机上预先选择文件 - 这是完全正确的,否则这将是一个巨大的安全漏洞。

如果您无法直接将文件从服务器 A 传输到服务器 B,那么您别无选择,只能请求用户再次选择这些文件。

也许一种方法是列出他们上传的所有文件,并提供单独的上传控件供他们填充。

请注意,IIS 将接受的最大"请求"大小通常有一个限制(如果一次上传多个文件,则可以轻松达到该限制)。 可以通过配置提高此限制,但较高的值会增加服务器上的资源负载