django 如何使用Python SDK将嵌套目录中的文件上传到存储帐户文件共享服务?

aelbi1ox  于 2023-08-08  发布在  Go
关注(0)|答案(3)|浏览(113)

我试图上传一个文件到路径,使用Azure Python SDK的ShareDirectoryClient类。我已经在下面附上了代码和错误,我得到。

path = "users/user11/projects/assets/fbx"
directories = path.lower().strip("/").split("/")
for directory in directories:
    try:    
        directory_client = directory_client.get_subdirectory_client(directory)
        if not directory_client.exists():
            directory_client.create_directory()
    except Exception as e:
        print(e.args)

with directory_client.get_file_client(file_name=upload_file.name) as file_client:
    file_client.upload_file(data = file_content, length=len(file_content))
    print("Uploaded")

字符串
“directory_client”是ShareDirectoryClient的对象,在上面的代码片段中使用它来创建目录。面临的问题是,每个正在创建的目录我都会得到下面的异常。

('The specifed resource name contains invalid characters.\nRequestId:fc43b173-e01a-000c-1ae8-bd388a000000\nTime:2023-07-24T04:37:52.5072468Z\nErrorCode:InvalidResourceName',)


客户端身份验证错误

Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. 

ErrorCode:AuthenticationFailed authenticationerrordetail:The MAC signature found in the HTTP request 'E0eObuCq+OdHAtf4qG80kb3wprxR4vwIsDpjinnVvUM=' is not the same as any computed signature. Server used following string to sign: 'PUT.......'


有时我甚至会收到ClientAuthenticationError。我真的不确定,是什么造成了这两种情况的问题。
任何解决方案和建议都是开放的。
谢谢你,谢谢

slwdgvem

slwdgvem1#

我在这里面临的问题是,我试图直接在文件共享内创建目录,但相反,应该有一些目录存在之前,尝试创建一个新的目录。所以,我手动添加了一个root文件夹内的文件共享,这解决了我的问题。
希望这对任何有同样问题的人有所帮助。

to94eoyn

to94eoyn2#

您遇到的错误似乎与身份验证和无效资源名称问题有关。让我们分解潜在的原因,并为每一个提供解决方案:
1.身份验证问题(ClientAuthenticationError):当验证过程有困难时,就会出现这个问题。确保已为Azure存储帐户正确安排凭据。要验证身份,您需要在创建ShareDirectoryClientShareFileClient对象时提供帐户名和帐户密钥(或SAS令牌)。
以下是如何使用帐户名和密钥进行验证的示例:

from azure.storage.fileshare import ShareDirectoryClient, ShareFileClient, ShareServiceClient
from azure.storage.fileshare import ShareDirectoryClient, ShareFileClient, ShareServiceClient

# Replace these with your actual storage account credentials
account_name = "your_storage_account_name"
account_key = "your_storage_account_key"

# Generate a ShareServiceClient
service_client = ShareServiceClient(account_url=f"https://{account_name}.file.core.windows.net", credential=account_key)

# Now you can continue with your existing code
path = "users/vaibhav11/projects/assets/fbx"
directories = path.lower().strip("/").split("/")
for directory in directories:
    try:    
        directory_client = directory_client.get_subdirectory_client(directory)
        if not directory_client.exists():
            directory_client.create_directory()
    except Exception as e:
        print(e.args)

# ... Rest of your code for uploading the file

字符串
1.无效资源名称问题:错误消息暗示指定的资源名称包含无效字符。在Azure文件存储中,目录和文件的命名约定有限制。确保directory变量不包含任何无效字符。
Azure文件存储中目录和文件名的可接受字符:

  • 字母数字字符(a-z、A-Z、0-9)
  • 破折号(-)
  • 下划线(_)

此外,避免使用保留字,如“con”,“com 1”,“com 2”等。
在创建目录之前,确保directory变量满足这些要求。
通过解决这些身份验证和资源名称问题,您的代码应按预期工作,并成功将文件上载到Azure File Share服务中的嵌套目录。

cld4siwp

cld4siwp3#

若要使用Python SDK(Azure Storage File Share SDK)将文件上载到Azure存储文件共享中的嵌套目录,您需要执行以下步骤:
1.安装所需的库:确保您安装了azure-storage-file-share包。如果没有,可以使用pip安装:

pip install azure-storage-file-share

字符串
1.使用Azure帐户进行身份验证:您需要创建一个Azure Storage帐户并获取连接字符串或帐户密钥来验证Python脚本。
1.编写Python代码来上传文件:使用Azure Storage File Share SDK与您的Storage帐户交互并上传文件。
下面的示例代码显示了如何将文件上载到Azure存储文件共享中的嵌套目录:

read more [enter link description here][1]

  [1]: https://%20https://www.espioninfotech.com/blog/the-future-of-influencer-marketing-trends-and-best-practices

相关问题