2015-05-19 67 views
2

我们在Azure中托管了我们的ASP.Net网站。我写了一个连续的web作业来处理队列触发器中的一些后台文件。有时这个过程涉及从一个网址获取一个图像,并保存在我们网站的预定义文件夹中。Azure webjob如何访问托管站点文件夹

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

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

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); 
    } 
} 

欣赏这方面的任何见解。谢谢!!

回答

1

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

app_data文件/工作/连续/等

因此,当你绘制的路径,确保你要写信给在其中webjob所在网站的根文件夹。还有更多信息here.

您遇到的问题似乎是HostingEnvironment.MapPath()返回空值。你可以修改UPLOAD_URL来确保你返回的是null以外的东西吗?要进行调试,您可以随时在不同的HostingEnvironment.MapPath(UPLOAD_URL)中运行Console.Writeline(),并在Webjobs Dashboard中检查输出。

希望这有助于

编辑:

尝试UPLOAD_URL = “〜/上传/”,因为它看起来像你正在寻找一个虚拟路径。 Source.

+0

第一次使用'〜/ Uploads /',但是在测试dev时它不起作用。最后检查'filepath == null',如果null从硬编码的自定义设置路径计算路径...得到它的工作,但不知道这是一个好方法 – Tau

+0

很高兴你得到它的工作。你可以尝试输出到日志或Webjob控制台进行调试吗? – lopezbertoni

+0

您的检查路径的想法是有效的......从那时起没有麻烦。谢谢。 – Tau