как открыть файл по его полному пути? - PullRequest
1 голос
/ 05 января 2012

У меня есть GridView, который имеет следующее поле шаблона, которое содержит имя файла, когда пользователь щелкает имя файла, я вызываю window.open (), чтобы открыть файл. У меня вопрос, я могу только передать относительный путь к window.open (). Я получаю ошибку, если я использую полный путь. Можно ли использовать полный путь для открытия файла? Благодарю.

<asp:TemplateField HeaderText="FileName">
                    <ItemTemplate>
                        <asp:LinkButton ID="lnkFile" runat="server"
                        Text='<%# Eval("FileName")%>' OnClick="lnkFile_Click">
                        </asp:LinkButton>
                    </ItemTemplate>
</asp:TemplateField>

Добавлено: фактическое местоположение файла определяется в web.config.

Я написал следующее lnkFile_Click (). Старая часть откроет новое окно для файла, но я не могу передать полный путь к файлу. Новая часть предоставит вам возможность открыть или сохранить файл. Мой вопрос, это вызовет проблему безопасности?

protected void lnkFile_Click(object sender, System.EventArgs e)
{
    string fileName = ConfigurationSettings.AppSettings["SPRAttachmentLocation"] + "\\SPR" + sprID + "\\" + ((LinkButton)sender).Text;
    if (!File.Exists(fileName))
    {
        Exception ex = new Exception("Could not find the file, please contact your administrator.");
        Response.Write("<p align=\"center\"><br /><br /><br /><br />There has been an Error: <strong>" + ex.Message + "</strong></p>\n");

        return;
    }

Новое:

* * 1010

Old:

   string newWindowUrl = "/SPR_Upload/SPR" + sprID + "/" + ((LinkButton)sender).Text;

            string javaScript =
             "<script type='text/javascript'>\n" +
             "<!--\n" +
             "window.open('" + newWindowUrl + "');\n" +
             "// -->\n" +
             "</script>\n";

   Page.ClientScript.RegisterStartupScript(GetType(), "", javaScript);
}

Ответы [ 3 ]

3 голосов
/ 05 января 2012

Ваш вопрос создает впечатление, что вы думаете, что можете открыть файл с локального компьютера пользователя.В таком случае это невозможно.

Window.open ожидает URL-адрес, поскольку файл расположен на стороне сервера, а не на стороне клиента.

С учетом сказанного, если вы пытаетесь открыть файл, расположенный на стороне сервера, и знаете полный путь к файлу;вам нужно создать виртуальный путь в вашем приложении, где находится файл.Это можно сделать, создав виртуальный каталог в своем приложении из диспетчера администрирования IIS (Панель управления -> Инструменты администратора -> IIS Mgmt) и сопоставив этот каталог с фактическим физическим каталогом.

РЕДАКТИРОВАТЬ:

Скажем, например, что весь ваш сайт физически расположен на сервере на c:\inetpub\wwwroot\your_app.Предположим, к вашему приложению можно получить доступ через http://example.com, а файлы, которые вы хотите обслуживать, физически находятся в d:\files.Предположим далее, что вы создали виртуальный каталог для своего приложения (как я объяснил выше) и что вы назвали эту виртуальную папку public_files.Если известно имя файла, можно получить доступ к файлу, просто перейдя на http://example.com/public_files/filename.ext.Поскольку вы в своем приложении уже знаете имя файла, все, что вам нужно передать в качестве параметра в window.open - это URL (http://example.com/public_files/filename.txt)

1 голос
/ 05 января 2012

Вы можете попробовать использовать AppDomainAppVirtualPath , чтобы получить виртуальный путь к файлу.

string vPath = HttpRuntime.AppDomainAppVirtualPath + "/my/relative/path"
0 голосов
/ 05 января 2012

если файл не находится в виртуальном каталоге, существует ряд проблем безопасности, которые необходимо рассмотреть и устранить. в общем случае, это плохая идея для доступа к файлу вне виртуального каталога.

если необходимо, вам нужно будет повысить разрешения безопасности и предоставить доступ к файлу в сети.

...