0

以下のような2つの異なるサーバーがあります。

1. WebServer - 私のアプリケーションはどこにありますか

2. FileServer - アップロードされたすべてのファイルが特定の場所 / フォルダーにある場所

私のWebアプリケーションでは、FileServerからアップロードされたすべてのファイル(アップロードしたもの)を表示する1つのページを作成しました。

しかし、問題は、そのファイルを開いたり読み取ろうとすると、できないことです。私は SFTP のすべての権利を持っています。Try-catch ブロックで問題が発生しています。 「コードが最適化されているか、ネイティブ フレームが呼び出し履歴の上にあるため、式を評価できません。」 ファイルのアップロードとダウンロードに REBEX を使用しました。

注 : 単純なテキスト ファイル (.txt) を開くことはできますが、他の形式のファイル (.PDF、.docx、.jpg など) を開くことはできません。

私のファイル読み取りコードは以下のようなものです。

protected void LinkButton1_Click(object sender, EventArgs e)
        {    
          try
                {
                    LinkButton lbtn = (LinkButton)sender;
                    using (Sftp _sftp = new Sftp())
                    {
                        _sftp.Connect(serverNm, 22);
                        _sftp.Login(username, password);
                        _sftp.ChangeDirectory(currentDirectory);

                        Stream stream = _sftp.GetStream(lbtn.ToolTip.ToString(), FileMode.Open, FileAccess.Read);
                        StreamReader sourceStream = new StreamReader(stream);
                        Byte[] buffer = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());

                        Response.Buffer = true;
                        if (lbtn.ToolTip.IndexOf(".pdf") > 0)
                        {
                            Response.ContentType = "application/pdf";
                        }
                        else if (lbtn.ToolTip.IndexOf(".txt") > 0)
                        {
                            Response.ContentType = "text/plain";
                        }
                        else if (lbtn.ToolTip.IndexOf(".xls") > 0)
                        {
                            Response.ContentType = "application/ms-excel";
                        }
                        else if (lbtn.ToolTip.IndexOf(".doc") > 0)
                        {
                            Response.ContentType = "application/msword";
                        }
                        else if (lbtn.ToolTip.IndexOf(".jpeg") > 0)// || lbtn.ToolTip.IndexOf(".jpg") > 0)
                        {
                            Response.ContentType = "image/jpeg";
                        }
                        else if (lbtn.ToolTip.IndexOf(".jpg") > 0)
                        {
                            Response.ContentType = "image/jpg";
                        }
                        else if (lbtn.ToolTip.IndexOf(".bmp") > 0)
                        {
                            Response.ContentType = "image/png";
                        }

                        Response.AddHeader("Content-Length", "attachment;filename=" + buffer.Length.ToString());
                        Response.BinaryWrite(buffer);
                        Response.End();                    

                    }
                }
                catch (Exception ex)
                {

                }
}

したがって、誰でもこの問題を解決するのに役立ちます。

最新の Mozilla ブラウザを使用しています。

ありがとうございました。

4

1 に答える 1

0

例外の完全なスタック トレースをここに投稿することは可能でしょうか? 次のように catch ブロックを変更することで、スタック トレースを取得できます。

            try
            {
                //... your code
            }
            catch (Exception ex)
            {
                Response.ContentType = "text/plain";
                Response.Write(ex.ToString());
                Response.End();
            }
于 2014-10-07T15:27:39.580 に答える