Потоки памяти FTP и управление изображением - PullRequest
1 голос
/ 05 декабря 2010

Эй, у меня есть URI управления изображениями на моем сайте asp. Я пытаюсь настроить загрузку ftp и сохранить ее в потоке памяти, а затем передать ее в управление изображениями.

Но безуспешно, новый URI не может использовать PhotoPath, и он просто не выглядит правильно. Мой "photoPath" содержит имя пути ftps, пытающееся передать его моему процессу. Полностью потерян. Все, что я хочу сделать, это при выборе моего gridview взять имя пути ftp + имя файла выглядит так: ftp: //192.168.1.2/Jelly.jpg

, что было сделано, и я сохранил его в строке имени PhotoPath. Затем выполните ftp-запрос на загрузку, сохраните его в потоке памяти и запустите в элемент управления изображением. Не должно быть трудно, верно?

Код:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) {
    string PhotoPath = "";
    GridViewRow row = GridView1.Rows[GridView1.SelectedIndex]; 
    PhotoPath = row.Cells[5].Text;
}

public void ProcessRequest (HttpContext context) {
    // error on this line due to photopath 
    FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(PhotoPath)); 
    request.Method = WebRequestMethods.Ftp.DownloadFile;
    request.Credentials = new NetworkCredential("username", "password");

    try {
        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        Stream stream = response.GetResponseStream();
        byte[] bytes = new byte[2048];
        int i = 0;
        MemoryStream mStream = new MemoryStream();
        do {
            i = stream.Read(bytes, 0, bytes.Length);
            mStream.Write(bytes, 0, i);
        } while (i != 0);

        context.Response.Clear();
        context.Response.ClearHeaders();
        context.Response.ClearContent();
        context.Response.ContentType = "image/jpeg"; // unsure of this line
        context.Response.BinaryWrite(mStream.GetBuffer());
    }
    catch (WebException wex) {
        //throw new Exception("Unable to locate or access your file.\\nPlease try a different file.");
    }
    catch (Exception ex) {
        throw new Exception("An error occurred: " + ex);
    }
}

public bool IsReusable {
    get  { return false; }
}

эта строка содержит ошибку: PhotoPath не существует в текущем контексте

    public void ProcessRequest (HttpContext context){
// error on this line due to photopath 
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(PhotoPath)); 
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential("username", "password");

Как только я сделал этот бит, мне нужно найти способ передать его в управление изображением ???

Первая часть кода принимает значение ячейки в моем gridView (имя пути и имя файла ftp), вторая часть - это мой метод загрузки этого фотопути и сохранения его в потоке памяти, а моя последняя часть, которую я не знаю, как чтобы сделать это, чтобы показать это в моем контроле изображений.

1 Ответ

2 голосов
/ 05 декабря 2010

PhotoPath выглядит как локальная переменная в методе GridView1_SelectedIndexChanged.Вы наверняка не можете получить к нему доступ из метода ProcessRequest.

Я думаю, у вас есть некоторые общие знания C #.

Сделайте PhotoPath переменной-членом вашего класса, чтобы исправить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...