Azure webjob 如何访问托管站点文件夹

Azure webjob how to access hosted site folder

我们在 Azure 中托管了我们的 ASP.Net 网站。我已经编写了一个连续的网络作业来在队列触发器的后台处理我的一些文件。有时,该过程涉及从 url 获取图像并将副本保存在我们网站的预定义文件夹中。

我们在主站点的代码中已经有一个获取图像并保存到文件夹的功能,所以我正在使用它。

在开发过程中,我 运行 手动运行 .exe 来检查触发器是否有效。在图像上传过程之前一切都很好。它无法将路径映射到给定文件夹。代码如下,filepath 变量始终为 null,所以我在这里遇到异常并且作业失败。有一个更好的方法吗?这是因为我 运行 手动作业,还是我以错误的方式使用了某些功能?

public class MyHelper
{
    public const string UPLOAD_URL = "/Uploads/";

    // other functions
    // ....

    private static void GetFileLocation(string prefix, string imageName, out string fileUrl, out string saveLocation)
    {
        var filename = imageName;

        // filepath is always null
        var filePath = HostingEnvironment.MapPath(UPLOAD_URL);
        fileUrl = Path.Combine(UPLOAD_URL, filename);

        // this here throws the exception because filepath is null
        saveLocation = Path.Combine(filePath, filename);
    }
}

感谢对此的任何见解。谢谢!!

您只能写入您网站的根文件夹。 Web 作业驻留在目录中。

app_data/jobs/continuous/etc

因此,当您映射路径时,请确保您尝试写入 webjob 所在网站的根文件夹。还有更多信息here.

您遇到的问题似乎是 HostingEnvironment.MapPath() 返回了空值。您可以修改 UPLOAD_URL 以确保您返回的不是 null 吗?要调试,当您在云中 运行 时,您始终可以 Console.Writeline() 不同的 HostingEnvironment.MapPath(UPLOAD_URL) 并检查 Webjobs 仪表板中的输出。

希望这对您有所帮助,

编辑:

试试 UPLOAD_URL = "~/Uploads/" 因为它看起来像是在搜索虚拟路径。 Source.

显然您可以写入 %HOME%\site\wwwroot,但这对我不起作用,所以我使用绝对路径写入 Azure Web 应用程序中的任何位置:D:\home\site\wwwroot.