直接从ftp

时间:2015-05-25 05:02:42

标签: c# asp.net image ftp

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

newArticle.ImageUrl = "ftp://" + FTPUser + ":" + FTPPassword + "@" + FTPServer + dtLatestArticles.Rows[i]["PictureUrl"].ToString();

这意味着每个人都拥有ftp服务器的用户名和密码。知道如何以另一种方式做到这一点吗?

我不想要,并且由于空间不足而无法将文件保存在运行网页的服务器上。

3 个答案:

答案 0 :(得分:2)

我认为你应采取的方法是

  1. 创建一个处理程序,比如FetchImage.ashx
  2. 此文件中的代码应使用用户名和密码从FTP获取图像(请参阅下面的示例)
  3. 根据您的图片将响应内容类型设置为PNG / JPEG
  4. 发送图片
  5. 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并提供相同的服务。在这个例子中,我只是告诉你如何做到这一点

答案 1 :(得分:1)

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

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

请注意,这会使服务器的流量增加一倍,一次进入和退出

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

答案 2 :(得分:0)

你可以做的是创建一个类,你将定义一些静态变量,如ftpUsernameftpPassword等。保存你的用户名和密码,并在需要连接到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显示图像的问题,您可以参考: