2015-05-25 2 views
0

У меня есть веб-приложение, где я хочу отображать изображения непосредственно пользователю с FTP-сервера. До тех пор, как контроль изображения принимает только URL изображения, а не образ, я должен сделать это таким образом:Показать изображение непосредственно с ftp

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

Это означает, что у каждого есть имя пользователя и пароль для сервера FTP. Любая идея, как это сделать по-другому?

Я не хочу и не могу сохранить файлы на сервере, который запускает веб-страницу из-за нехватки места.

+0

Я не думаю, что это именно то, что вы хотите? Вы просто хотите отображать изображения локально? Эта ссылка может дать некоторое представление об этом, поскольку вы можете сохранить ее локально на веб-клиенте до того, как она будет загружена и получить к ней доступ. http://stackoverflow.com/questions/4459379/preview-an-image-before-it-is-uploaded – Chitowns24

+0

Это не то, что я хочу, у меня уже есть файлы, загруженные на ftp-сервер, и вы хотите показать их на пользователь. –

+0

Где хранятся файлы?Веб-сайт не находится на том же сервере, что и FTP-сервер? – Chitowns24

ответ

2

Я думаю, что подход вы должны принять это

  1. Создать обработчик, скажем FetchImage.ashx
  2. Код в этом файле должен принести изображение с FTP, используя имя пользователя и пароль (см для образца)
  3. указан тип содержимого ответа в PNG/JPEG на основе вашего образа
  4. Отправить ваше изображение

Sample Код 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); 

Calling этот файл,

<img src="FetchImage.ashx" /> 

Усовершенствования этого кода будет отправить имя файла FetchImage.ashx и служат тем же самым. В этом примере я просто покажу вам, как это можно сделать.

+0

Гораздо лучше использовать обработчики (ASHX), чем страницы, так как нет необходимости в жизненном цикле всей страницы. –

+0

Я согласен. Мне просто хотелось, чтобы концепция или шаги, которые могла бы предпринять OP для достижения и Я вижу, что вы избили меня до этого :) –

1

Если FTP-сервер требует аутентификации, вы не можете скрыть учетные данные.

Одним из способов было бы добавить обработчик типа прокси на вашем сайте, который получит имя изображения по URL-адресу и будет извлекать файл с FTP-сервера и отправлять его непосредственно пользователю. Таким образом, только ваш код будет иметь учетные данные, и нет необходимости сохранять файлы в другом месте, если нет места.

Обратите внимание, что это увеличит трафик вашего сервера с помощью двойного количества изображений, один раза в и один раз из

Лучше всего было бы найти сервер с достаточной мощностью и возможностью HTTP служащих файлов.

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 вы можете обратиться к:

+0

Нет, этого не будет, все равно будет отображаться в URL-ссылке для изображения, как и раньше. Сохранение его как статической переменной не заставит пароль и имя пользователя безопасно – Draken

Смежные вопросы