我有一个网络应用程序,我想直接从FTP服务器向用户显示图像。只要图像控件只采用图像URL而不是图像,我就必须这样做:
newArticle.ImageUrl = "ftp://" + FTPUser + ":" + FTPPassword + "@" + FTPServer + dtLatestArticles.Rows[i]["PictureUrl"].ToString();
这意味着每个人都拥有ftp服务器的用户名和密码。知道如何以另一种方式做到这一点吗?
我不想要,并且由于空间不足而无法将文件保存在运行网页的服务器上。
答案 0 :(得分:2)
我认为你应采取的方法是
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)
你可以做的是创建一个类,你将定义一些静态变量,如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显示图像的问题,您可以参考: