c# - 将文件下载到 Azure 函数应用程序进行操作

标签 c# azure azure-functions azure-blob-storage

已编辑谢谢@Marco

我正在尝试编写一个函数应用程序,从 URL 中获取 SVG 并将其转换为 PNG。我知道现有的 API 可以执行此操作,如 CloudConvert ,但它们不能很好地与嵌入字体配合使用,这对我来说是一个要求。

无论如何,我编写了一个非常基本的功能应用程序,此时它只是下载一个文件。一切在本地都工作得很好,但是当我发布到 Azure 时,我收到 WebClient 请求期间发生异常。

感谢 @Marco 的建议,我从 WebClient 切换到 HTTPWebRequest 以获得更详细的错误处理,结果,我看到以下内容:

2018-10-11T13:53:53.558 [Info] Function started (Id=e3cbda04-140e-4ef7-ad6c-c871ffe179dd)
2018-10-11T13:53:53.590 [Info] C# HTTP trigger function processed a request. 2018-10-11T13:53:53.752 [Info] Download Fail
2018-10-11T13:53:53.752 [Info] Access to the path
'D:\Windows\system32\734e16961fc276df.svg' is denied.

我是否正在尝试做一些不可能的事情,或者有解决办法吗?有没有办法在 Azure 函数中配置权限?我需要将文件拉下来进行编辑,而不仅仅是使用字节数组。

非常感谢!

public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, 
        TraceWriter log, ExecutionContext context)
{
    log.Info("C# HTTP trigger function processed a request.");

    // parse query parameter
    string svgURL = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "l", true) == 0)
        .Value;

    if (svgURL == null)
    {
        // Get request body
        dynamic data = await req.Content.ReadAsAsync<object>();
        svgURL = data?.svgURL;
    }
    // download file from URL
    var uniqueName = GenerateId() ;
    try 
    { 
        using (var client = new WebClient())
        {
           client.DownloadFile(svgURL, uniqueName + ".svg" );
        }
    }
    catch (Exception e)
    {
        log.Info("Download Fail");
        log.Info(e.Message);
    }
}

最佳答案

解决此问题的最简单方法是使用临时存储。我明白为什么 Azure 不希望函数挤满应用程序目录。更新后的代码如下:

我替换了这个:

client.DownloadFile(svgURL, uniqueName + ".svg" );

这样:

client.DownloadFile(svgURL, Path.GetTempPath() + "\\" + uniqueName + ".svg" );

效果非常好。

编辑: 下面是我进行此调用的 GitHub 存储库。还有其他事情正在进行,但您可以看到我保存到临时存储的位置。
https://github.com/osuhomebase/SVG2PNG-AzureFunction

关于c# - 将文件下载到 Azure 函数应用程序进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52761048/

相关文章:

c# - 最佳实践的全局结果-Asp.Net Core 3和Angular 9中的错误处理

azure - 如何在 Azure 应用服务上部署 jHipster,我收到 500 个请求超时

azure - 将多值/数组 GET 参数传递给 Azure Function 并在 CosmosDB 中使用它

azure - 集成 Azure 服务总线主题和 Azure 函数

javascript - 获取数据集以使用数据表 ajax

c# - 如何避免循环多线程任务中 JSON 序列化期间集合修改?

c# - Entity Framework Core 字段大小不正确

使用命令行参数启动时 Azure ACI 容器部署失败

azure - 如何让 Playwright 使用我的管道中的配置文件

azure - 增加azure httptrigger函数中的节点堆内存大小