Azure应用服务访问文件存储以使用webjob复制内容

时间:2017-03-07 19:05:08

标签: azure azure-webjobs azure-web-app-service

我有一个托管wordpress网站的Azure应用服务。我想编写一个控制台应用程序,它将从网站(文件存储)复制文件并将其粘贴到部署槽中。所有的在线资源都在谈论"访问密钥"用于连接到文件存储,但我在应用服务门户中看不到这样的内容。我可以使用部署凭据或Web部署凭据来访问这些文件吗?

2 个答案:

答案 0 :(得分:3)

根据您的描述,我建议您使用webjob的文件触发器来达到您的要求。

链接:webjob-extension

您可以使用文件触发器来查看系统文件路径中的文件更改,您可以找到部署插槽的ftp凭据,然后使用它通过webjob的扩展包将文件表单生产文件夹上载到部署插槽。

更多细节,您可以参考以下图片和代码:

1.找到ftp凭证并设置密码

enter image description here

设置用户名和密码

enter image description here

2 ..从nugget包管理器安装Microsoft.Azure.WebJobs.Extensions并编写webjob方法。

如下代码:

注意:默认文件路径为D:/ home / data,如果您的网站文件夹中有文件,则需要更改其路径如下。

   static void Main()
    {
        var config = new JobHostConfiguration();
        FilesConfiguration filesConfig = new FilesConfiguration();
        string home = Environment.GetEnvironmentVariable("HOME");
        if (!string.IsNullOrEmpty(home))
        {
            filesConfig.RootPath = Path.Combine(home, "site");
        }
        config.UseFiles(filesConfig);
        var host = new JobHost(config);
        // The following code ensures that the WebJob will be running continuously
        host.RunAndBlock();
    }

功能:

public static void ImportFile(
                [FileTrigger(@"wwwroot\doc\{name}", "*.*", WatcherChangeTypes.Created | WatcherChangeTypes.Changed)] Stream file,
            FileSystemEventArgs fileTrigger,
            TextWriter log)
        {
            log.WriteLine(string.Format("Processed input file '{0}'!", fileTrigger.Name));
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(string.Format("ftp://yourftpurl.ftp.azurewebsites.windows.net/site/wwwroot/doc/{0}", fileTrigger.Name));
            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.Credentials = new NetworkCredential(@"username", "password");

            Stream requestStream = request.GetRequestStream();
            file.CopyTo(requestStream);
            requestStream.Close();
            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            log.WriteLine("Upload File Complete, status {0}", response.StatusDescription);
            response.Close();
        }

结果:

如果将文件添加到生产的doc文件夹,则Web作业会将其复制到deploymeny_solt的doc文件夹。

enter image description here

答案 1 :(得分:0)

您可以使用" Azure Site Replicator"延期。一个插槽就像另一个azure app服务,所以它应该在插槽之间复制。

在您希望复制所有内容的部署插槽中,通过单击"获取发布配置文件"

从概述选项卡下载发布设置

在您的应用服务制作广告位中,转到扩展程序并添加Site Replicator扩展程序。安装完成后,单击它并单击“浏览”。这将打开一个包含配置选项的新窗口。

在配置窗口中,上传“发布设置”文件。