【问题标题】:Connection string data source path to access files from other projects从其他项目访问文件的连接字符串数据源路径
【发布时间】:2013-08-23 03:22:38
【问题描述】:

我有 2 个项目,1 个是 Web 应用程序,另一个是 WPF,在我的 Web 应用程序中,我有一个上传页面,允许用户上传他们的文件,我使用 Server.MapPath(@"~/something/")目录,但我如何在我的 WPF 应用程序中检索该文件,我可以通过键入完整路径 C:/programfiles/projects ... 等来检索,但我正在从数据库中检索目录,并且在数据库中它看起来像那样〜 /something/filename.jpg .

我只在数据库中保存 ~/something/filename.jpg ,如何在不手动输入完整路径的情况下检索完整路径?

完整路径位于另一个项目中,例如 C:/programfiles/projects/visualstudio/projectname/something/filename.jpg。

如何在另一个项目中仅使用 ~/something/filename.jpg 访问文件?有一个错误提示路径不存在,除非我输入完整路径,但我不希望这样。

有人说我们必须在我的 App.Config 的连接字符串中添加一个域目录,然后我需要使用它并将它与数据库 url 结合以获得我的完整路径。但我不知道该怎么做。

连接字符串:

  <add name="istellarEntities2" connectionString="metadata=res://*/ModelSQL.iStellar.csdl|res://*/ModelSQL.iStellar.ssdl|res://*/ModelSQL.iStellar.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=IMAC-PC10\SQLEXPRESS;initial catalog=istellar;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

我如何从我的数据库中检索(URL,使用实体框架 daoWordPuzzle 是一个由 CRUD 代码组成的类文件):

@daoWordPuzzle.GetfileURL() // however this displays only ~/something/something.jpg

我需要完整的路径。我该怎么做?

【问题讨论】:

    标签: c# asp.net wpf connection-string datasource


    【解决方案1】:

    首先,一个简单的问题:您的 WPF 应用程序是否在同时运行网站的 WEB SERVER 上运行?

    或者您的 WPF 应用程序在桌面上,而 Web 服务器在其他地方?

    在第一种情况下:您可以简单地将路径的第一部分存储在 WPF 应用程序的 appSettings 中,以告诉您目录在哪里。例如,仅将路径的最后一部分存储在数据库列中。这样您就可以使用 System.IO 命名空间中的 Path.Combine() 来查找位置。

    在另一种情况下可以使用相同的方法,但这取决于您是否拥有与存储文件的 Web 服务器目录的 UNC 共享。如果没有,您的 WPF 应用程序可能需要使用 URL 而不是文件路径通过 HTTP 访问文件。如果是,您可以简单地将路径前缀存储在应用程序配置中,例如“\WEBSERVER\Something”

    using System.Configuration;
    
    string fileUploadDirectory = ConfigurationManager.AppSettings["FileUploadDirectory"];
    
    // using Substring(1) to skip the ~ that is stored in the database and is returned by GetfileURL()
    string fullFilePath = Path.Combine(fileUploadDirectory ,daoWordPuzzle.GetfileURL().Substring(1)) 
    

    【讨论】:

    • 在这种情况下,您的 WPF 应用程序将需要使用其 URL 而不是文件路径来访问该文件。因此,将相对路径存储在数据库中,并将 URL 的开头部分添加到代码中(允许您轻松移动应用程序并只需更改配置的那一部分)。例如,如果您的 Web 应用程序位于 localhost:1234/MyApp 中,并且上传位于 ~/something 中。你的相对 URL 是 /something/file1.png,你的 URL 前缀 / base 是 localhost:1243/MyApp。因此,您可以像 localhost:1243/MyApp/something/file1.png 那样构建完整的 URL,并且您的 WPF 应用程序可以通过这种方式访问​​它
    • 我应该将它们附加到哪里?连接字符串?
    • 连接字符串不会为你做这件事。您必须在代码中执行此操作,获取存储在数据库中的部分并使用 Path.Combine() 将其组合到前缀中。但是,我认为您可能需要查看应用程序的体系结构,以确保您能够从 WPF 应用程序中的 Web 服务器访问文件......这并不常见。
    • 但是如果我在网络服务器上运行呢?
    • 如果 WPF 在 Web 服务器上运行,它将能够使用本地路径访问文件。所以试试这个字符串 fullFilePath = Path.Combine(@"C:\Projects\MyProject", daoWordPuzzle.GetfileURL().Substring(1)) // 使用 Substring(1) 跳过你存储在数据库中的 ~。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 2020-11-25
    • 2012-06-11
    • 2018-03-31
    • 2010-12-22
    • 2011-09-09
    相关资源
    最近更新 更多