【问题标题】:how to Copy Images from Main Domain to Subdomain Folder in c#如何在c#中将图像从主域复制到子域文件夹
【发布时间】:2014-09-18 06:59:54
【问题描述】:

我正在尝试将我的文件从主域复制到折叠的子域

我习惯了下面的代码

CopyFiles("http://192.168.10.119:8010/1.jpg", "http://192.168.10.120:8010/TestFolder/1.jpg");

 public void CopyFiles(string sourcePath, string destinationPath)
    {
        string[] files = System.IO.Directory.GetFiles(sourcePath);
        Parallel.ForEach(files, file =>
        {
            System.IO.File.Copy(file, System.IO.Path.Combine(destinationPath, System.IO.Path.GetFileName(file)));

        });
    }

然后我得到一个错误:

不支持 URI 格式。

任何人都可以解决这个问题。谢谢:)

【问题讨论】:

  • File.Copy 只能在本地文件系统上进行复制。如果你想通过 HTTP 做这样的事情,也许可以查看一个名为 WebDAV 的 HTTP 扩展协议来寻找解决方案。 IIS 支持它(AFAIK),但它必须至少在目标主机上启用。
  • File.Copy 也可以使用网络共享进行复制,因此如果您可以设置,您仍然可以使用File.Copy 进行复制,例如\\192.168.10.119\WebShare\1.jpg\\192.168.10.120\WebShare\TestFolder\1.jpg.
  • 这段代码将在哪里运行?在两台服务器之一上?或其他远程管理机器?或者是其他东西??简而言之,请更详细地描述场景(更具体更好,你想从用户的角度解决什么问题..谁是用户?服务器管理员)..否则你会得到100个建议给你的解决方案.. 其中许多可能远不适合您的需求.. 比如 - WebDAV.. 您甚至可以访问 IIS 服务器吗?如果尚未安装组件,您是否允许安装,或者您是否允许运行 FTP 服务?
  • 但我的要求是这样做,不知道为什么人们对我的问题投了反对票。
  • 我知道你们都是TOPPERS。这就是为什么我希望最好的方式在那里分享我的问题,但所有人都在努力降低士气

标签: c# asp.net


【解决方案1】:

System.IO.File.Copy 无法将文件从一个 URL(通过 http)移动到另一个。您需要指定有效的本地路径,例如

CopyFiles("C:\\BasePath\\1.jpg", "C:\\Target\\TestFolder\\1.jpg");

这意味着您需要在带有文件的计算机上本地运行程序,或者可以通过本地网络访问它们(无需通过互联网)。

如果您想从远程网络服务器 url 下载图像,您可以在此处找到相关信息 copy image from url

写入远程位置变得更加棘手,您基本上需要在远程主机(接收文件的主机)上有一个 FTP 服务器来将文件发送到how to send files to FTP。网络服务器不只是接受您发送给他们的任何文件,想象一下,如果有人可以将文件上传到他们想要的任何服务器

【讨论】:

  • 还有其他方法可以将文件从域目录复制到子域目录吗?
  • 从网络服务器读取文件很容易,写入 FTP 有点困难,好像这很容易会带来安全风险。
【解决方案2】:

您无需提供像“192.168.10.119:8010/1.jpg”这样的路径, 服务器可以直接访问同一服务器的文件夹, 所以你可以提供像 /YourFolderName/fileName.jpg" 的路径

希望这会对你有所帮助。

      CopyFiles("/1.jpg", "/TestFolder");



 public void CopyFiles(string sourcePath, string destinationPath)
    {
            string filePath = System.Web.HttpContext.Current.Server.MapPath(destinationPath).ToString();
            sourcePath = System.Web.HttpContext.Current.Server.MapPath(sourcePath);
            System.IO.File.Copy(sourcePath, System.IO.Path.Combine(filePath, System.IO.Path.GetFileName(sourcePath)));
    }

【讨论】:

    【解决方案3】:

    请对您的代码进行以下更改。 希望对你有帮助, 此代码会将所有图像从一个地方复制到另一个地方。

    函数调用

     CopyFiles("/DomainFolder/Images", "/DomainFolder/SubDomainFolder/Images");
    

    方法

    public void CopyFiles(string sourcePath, string destinationPath)
        {
            string[] files = System.IO.Directory.GetFiles(System.Web.HttpContext.Current.Server.MapPath(sourcePath));
            foreach (var file in files)
            {
                string filePath = System.Web.HttpContext.Current.Server.MapPath(destinationPath).ToString();
    
                System.IO.File.Copy(file, System.IO.Path.Combine(filePath, System.IO.Path.GetFileName(file)));
    
            };
        }
    

    谢谢你,

    问候, JJRS

    【讨论】:

    • 收到错误“192.168.10.119:8010/1.jpg”不是有效的虚拟路径。
    • 请不要提供像“192.168.10.119:8010/1.jpg”这样的图片路径,您需要为您的域提供有效的路径,您的图片存储在哪里。 "文件夹名/ImageName.jpg"
    • 但是我的文件存储在我写的这个路径中:(
    • 请将以下代码复制粘贴到您的解决方案中。 CopyFiles("/1.png", "/TestFolder"); public void CopyFiles(string sourcePath, string destinationPath) { string filePath = System.Web.HttpContext.Current.Server.MapPath(destinationPath).ToString(); sourcePath = System.Web.HttpContext.Current.Server.MapPath(sourcePath); System.IO.File.Copy(sourcePath, System.IO.Path.Combine(filePath, System.IO.Path.GetFileName(sourcePath))); }
    猜你喜欢
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 2022-01-17
    相关资源
    最近更新 更多