Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET页面上直接从FTP显示图像_C#_Asp.net_Image_Ftp - Fatal编程技术网

C# 在ASP.NET页面上直接从FTP显示图像

C# 在ASP.NET页面上直接从FTP显示图像,c#,asp.net,image,ftp,C#,Asp.net,Image,Ftp,我有一个web应用程序,我想直接从FTP服务器向用户显示图像。只要图像控件只获取图像URL而不获取图像,我就必须这样做: newArticle.ImageUrl = "ftp://" + FTPUser + ":" + FTPPassword + "@" + FTPServer + dtLatestArticles.Rows[i]["PictureUrl"].ToString(); 这意味着每个人都有ftp服务器的用户和密码。你知道怎么用另一种方法吗 由于空间不足,我不希望也无法将文件保存在运

我有一个web应用程序,我想直接从FTP服务器向用户显示图像。只要图像控件只获取图像URL而不获取图像,我就必须这样做:

newArticle.ImageUrl = "ftp://" + FTPUser + ":" + FTPPassword + "@" + FTPServer + dtLatestArticles.Rows[i]["PictureUrl"].ToString();
这意味着每个人都有ftp服务器的用户和密码。你知道怎么用另一种方法吗


由于空间不足,我不希望也无法将文件保存在运行网页的服务器上。

如果FTP服务器需要身份验证,则无法隐藏凭据

一种方法是在站点上添加一个代理类型处理程序,该处理程序将在URL上获取图像的名称,并从FTP服务器检索文件并直接发送给用户。这样,只有您的代码才具有凭据,如果没有空间,则无需将文件保存到其他任何位置

请注意,这将使服务器的流量增加一倍的图像量,一次输入一次输出


更好的方法是找到一个具有足够容量和可能性的服务器,用于HTTP文件服务

我认为你应该采取的方法是

  • 创建一个处理程序,比如FetchImage.ashx
  • 此文件中的代码应该使用用户名和密码从FTP获取图像(请参见下面的示例)
  • 根据图像将响应内容类型设置为PNG/JPEG
  • 发送您的图像
  • FetchImage.ashx.cs的示例代码

    var webClient = new WebClient();
    byte[] imageBytes = webClient.DownloadData("ftp://server/image.png");
    
    context.Response.Buffer = true;
    context.Response.Charset = "";
    context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    context.Response.ContentType = "image/png";
    context.Response.AddHeader("content-disposition", "attachment;filename=Image.png");
    context.Response.BinaryWrite(imageBytes);
    
    调用此文件

    <img src="FetchImage.ashx" />
    
    
    

    对这段代码的改进是将文件名发送到FetchImage.ashx并提供相同的服务。在这个示例中,我只是向您展示了如何做到这一点

    您可以创建一个类,在其中定义一些静态变量,如
    ftpUsername
    ftpPassword
    等。在那里保存您的用户名和密码,无论何时需要连接到ftp服务器,只需将这些静态变量直接调用到代码中即可。这将帮助您隐藏您的实际用户名和密码

    public static class ClassName
    {
        static internal string connString = "Server=localhost;Database=db_criminalact;UID=root;Password='';CharSet=utf8;Connection Timeout=10;";      
    
        static internal string ftpServer = "127.0.0.1"; //"192.168.3.3";
        static internal string ftpFolder = "criminalact_pic";
        static internal string ftpUsername = "ftpserver";
        static internal string ftpPassword = "pswadmin";
    }
    

    对于直接从ftp显示图像的问题,您可以参考:

    我认为这不是您想要的吗?是否只想在本地显示图像?此链接可能会提供一些有关这方面的见解,因为您可以在上载和访问它之前将其本地存储在web客户端上。这不是我想要的,我已经将文件上传到ftp服务器上,并希望将它们显示给用户。那么文件存储在哪里?该网站与FTP服务器不在同一服务器上?不,这就是问题所在。网站位于另一台服务器上使用处理程序(ASHX)比使用页面要好得多,因为不需要整个页面生命周期我同意。。我只是想提出OP可以实现的概念/步骤,我看到你在这方面胜过了我:)不,不会,它仍然会像以前一样显示在图像的URL链接中。将其存储为静态变量不会突然使密码和用户名变得安全