我们在Azure中托管了我们的ASP.Net网站。我编写了一个连续的Web作业来处理队列触发器后台的一些文件。有时,该过程涉及从网址获取图像并将副本保存在我们网站的预定义文件夹中。
我们已经有了在主站点的代码中获取图像并保存到文件夹的功能,所以我正在使用它。
在开发过程中,我手动运行.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);
}
}
欣赏对此的任何见解。谢谢!
答案 0 :(得分:1)
您只能写入您网站的根文件夹。 webjob驻留在目录中。
app_data文件/作业/连续/等
因此,当您映射路径时,请确保您尝试写入webjob所在的网站的根文件夹。有更多信息here.
您遇到的问题似乎是HostingEnvironment.MapPath()返回一个空值。你可以修改UPLOAD_URL以确保你返回null以外的东西吗?要进行调试,当您在云中运行它时,可以始终使用不同的HostingEnvironment.MapPath(UPLOAD_URL)的Console.Writeline()并检查Webjobs仪表板中的输出。
希望这有帮助,
修改强>
尝试使用UPLOAD_URL =“〜/ Uploads /”,因为它看起来像是在搜索虚拟路径。 Source.
答案 1 :(得分:0)
显然,您可以写入if country_code == requestLocale() {
print(latest)
}
,但对我而言不起作用,因此我使用绝对路径写入Azure Web App中的任何位置:%HOME%\site\wwwroot
。