我仅使用 Microsoft Azure 存储,不使用其他 Azure 产品/服务。我通过 ftp 类型客户端 (GoodSync) 将文件上传到我的存储 blob,并且在所有文件已经位于 Blob 中之后,我需要根据文件扩展名更改所有文件的内容类型。我环顾四周,没有找到在没有使用 PowerShell 的 VPS 的情况下如何做到这一点的方法。我有哪些选择以及如何实现这一目标?我真的需要一步一步来。
我想上传通过 Base64 表单从网络应用程序和移动应用程序发送的用户的个人资料图片。
\n\n根据POST请求,他们需要JSON在正文上发送一个看起来像这样的内容。
{\n "name":"profile-pic-123.jpg",\n "file":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxQTEhIUEhIUFBUV\xe2\x80\xa6K9rk8hCAEkjFMUYiEAI+nHIpsQh0AkisDYRTOiCAbWVtgCtI6IlkHh7LDTQXLH0EIQBj//2Q==" // the base64 image\n}\nRun Code Online (Sandbox Code Playgroud)\n\n现在在服务器端使用Node和Express,我使用了这个 npm 模块,azure-storage它提供了一种使用 Web 服务将文件上传到 azure blob 存储的好方法。
但有一点我无法理解。这是我的控制器的部分代码。我成功创建了所有必要的连接和密钥以及其他创建工作的内容blobService:
controllers.upload = function(req, res, next){\n\n // ...\n // generated some sastoken up here\n // etc.\n // ...\n\n var uploadOptions = {\n container: \'mycontainer\',\n blob: req.body.name, // im not sure about this\n path: req.body.file // im not sure about this either\n }\n\n sharedBlobService.createBlockBlobFromLocalFile(uploadOptions.container, uploadOptions.blob, …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Fedora 22 上编译 Azure 存储 c++ SDK。我使用的是 gcc 版本 5.1.1-1。当我使用以下命令编译测试应用程序时:
$> CASABLANCA_DIR=/source/codebox/azure/cpprestsdk/ CXX=g++ cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=on
$> make
Run Code Online (Sandbox Code Playgroud)
它会产生以下错误消息:
/usr/bin/ld: CMakeFiles/azurestoragetest.dir/main.cpp.o: undefined reference to symbol 'pthread_rwlock_wrlock@@GLIBC_2.2.5'
/usr/lib64/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
tests/CMakeFiles/azurestoragetest.dir/build.make:879: recipe for target 'Binaries/azurestoragetest' failed
make[2]: *** [Binaries/azurestoragetest] Error 1
CMakeFiles/Makefile2:125: recipe for target 'tests/CMakeFiles/azurestoragetest.dir/all' failed
make[1]: *** [tests/CMakeFiles/azurestoragetest.dir/all] Error 2
Makefile:126: recipe for target 'all' failed
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
我可以在/usr/lib64目录中看到libpthread.so.0 …
根据 azure 文档,可以通过从 azure-webjobs-hosts 中删除 blob 来重新触发它们。
[...Blob 收据存储在函数应用的 Azure 存储帐户中名为 azure-webjobs-hosts 的容器中(由 AzureWebJobsStorage 应用设置指定)...要强制重新处理 Blob,请删除该 Blob 收据手动从 azure-webjobs-hosts 容器中获取 blob。]
如果我有中毒 blob 的列表,是否可以通过将它们从 webjobs-blobtrigger-poison 中删除来重新触发它们,还是只适用于成功的 blob?不幸的是,文档中没有说明。
当 Blob 触发器函数失败时,默认情况下,Azure Functions 会针对给定 Blob 重试该函数最多 5 次(包括第一次尝试)。如果 5 次尝试全部失败,Functions 会向名为 webjobs-blobtrigger-poison 的存储队列添加一条消息。
在 Blob 存储中配置 CORS 的限制让我感到沮丧。
由于这些限制,我最多只能找到约 48 个主机。
对于我的场景(私有 cdn 来服务 js、css、字体等资产),我看不到任何其他使用*for的方法AllowedOrigins。这是唯一的方法吗?没有人(没有其他主机)应该能够使用我的许可字体(https://www.viget.com/articles/cors-youre-doing-it-wrong)。
通配符之类的*.int.any.local.network可能是一个解决方案。
http://brand-AT.int.any.local.network
http://brand-be.int.any.local.network
http://brand-bg.int.any.local.network
http://brand-ca.int.any.local.network
http://brand-ch.int.any.local.network
http://brand-cn.int.any.local.network
http://brand-tr.int.any.local.network
http://brand-cz.int.any.local.network
http://brand-de.int.any.local.network
http://brand-dk.int.any.local.network
http://brand-es.int.any.local.network
http://brand-fi.int.any.local.network
http://brand-fr.int.any.local.network
http://brand-co.uk.int.any.local.network
http://brand-hu.int.any.local.network
http://brand-ie.int.any.local.network
http://brand-it.int.any.local.network
http://brand-nl.int.any.local.network
http://brand-pl.int.any.local.network
http://brand-pt.int.any.local.network
http://brand-ro.int.any.local.network
http://brand-ru.int.any.local.network
http://brand-se.int.any.local.network
http://brand-sk.int.any.local.network
http://brand-tr.int.any.local.network
http://brand-us.int.any.local.network
http://brand-za.int.any.local.network
Run Code Online (Sandbox Code Playgroud)
通配符之类的*.qs.any.dmz.network可能是一个解决方案。
http://brand-AT.qs.any.dmz.network
http://brand-be.qs.any.dmz.network
http://brand-bg.qs.any.dmz.network
http://brand-ca.qs.any.dmz.network
http://brand-ch.qs.any.dmz.network
http://brand-cn.qs.any.dmz.network
http://brand-tr.qs.any.dmz.network
http://brand-cz.qs.any.dmz.network
http://brand-de.qs.any.dmz.network
http://brand-dk.qs.any.dmz.network
http://brand-es.qs.any.dmz.network
http://brand-fi.qs.any.dmz.network
http://brand-fr.qs.any.dmz.network …Run Code Online (Sandbox Code Playgroud) 我正在尝试将图像保存到我们的 Azure 博客存储中。感谢通过代码片段下面的链接提供的有用响应,我能够成功地将文件保存到我们的顶级容器中。不幸的是,我希望将文件保存到该容器中的子目录中。而且,在我的一生中,我无法让它发挥作用。
目前,图像正在保存到我们的“images”容器中。该容器内有一个文件夹“members”。我希望将文件保存到该子目录中。所以“图像/成员”。我尝试将“images/members”传递给 GetBlockBlobReference 但文件根本没有保存(或者,至少我找不到它)。
这看起来应该很简单。提前致谢。
CloudBlobClient blobClient = account.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("images");
CloudBlockBlob blockBlob = container.GetBlockBlobReference(filename);
blockBlob.UploadFromStream(stream);
Run Code Online (Sandbox Code Playgroud)
如果您阅读有关带有 blob 存储触发器的 Azure WebJobs 的文档,他们会提到这不太可靠:
WebJobs SDK 扫描日志文件以监视新的或更改的 blob。这个过程不是实时的;创建 blob 后几分钟或更长时间可能不会触发函数。此外,存储日志是在“尽力而为”的基础上创建的;无法保证所有事件都会被捕获。在某些情况下,日志可能会丢失。如果您的应用程序无法接受 Blob 触发器的速度和可靠性限制,则建议的方法是在创建 Blob 时创建队列消息,并在处理 Blob 的函数上使用 QueueTrigger 属性而不是 BlobTrigger 属性。
https://github.com/Azure/azure-webjobs-sdk/wiki/Blobs
我假设他们对 Azure Functions 使用相同的功能,但在那里我找不到任何相关信息。有人知道更多吗?这种情况已经改变还是仍然如此?
我正在设置烧瓶服务的日志记录。我尝试使用以下代码将日志写入天蓝色的 blob 存储
import logging
import sys
from azure_storage_logging.handlers import BlobStorageRotatingFileHandler
logger = logging.getLogger('service_logger')
logger.setLevel(logging.DEBUG)
log_formater = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(process)d - %(message)s')
azure_blob_handler = BlobStorageRotatingFileHandler(filename = 'service.log',
account_name='servicestorage',
account_key='',
maxBytes= maxBytes,
container='service-log')
azure_blob_handler.setLevel(logging.INFO)
azure_blob_handler.setFormatter(log_formater)
logger.addHandler(azure_blob_handler)
Run Code Online (Sandbox Code Playgroud)
然后,我尝试使用 logger.warning('test warning'),但没有在 azure blob 容器上创建日志文件。
谁能帮我找出我哪里做错了?
最好,艾根
我已经回顾过这一点: Getting list of names of Azure blob files in a container?
但我还没有找到任何关于如何使用 C# 列出容器内特定虚拟文件夹中的文件的代码示例。据我所知。我没有看到任何在 ListBlobs () 方法中指定文件路径的方法。
var blobStorageAccount = GetStorageAccount();
var blobClient = blobStorageAccount.CreateCloudBlobClient();
var blobContainer = blobClient.GetContainerReference(containerName);
List<string> blobNames = blobContainer.ListBlobs().OfType<CloudBlockBlob>().Select(b => b.Name).ToList();
Run Code Online (Sandbox Code Playgroud) 我正在将一些带有不同特殊字符的文件上传到 blob。它没有被上传。我发现azure的文件命名有一些限制。因此,我需要 blob 文件名不支持的 unicode 字符列表,或者查找 azure blob 文件名是否支持某个字符的方法。
我已经在下面提到了这一点。他们没有提供任何特定的列表或找到它的方法。 https://learn.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-shares--directories--files--and-metadata