curlazure-blob-storage

Azure Blob Storage (REST API): Cannot download blob in container with curl using SAS token


I have been playing around with using the Azure Blob storage REST API for a few days now.

I can connect to the resource, list containers, generate SAS tokens for any given container and also, just recently, list blobs within a container (See here:Azure Blob Storage (REST API): Cannot list blobs in container with curl using SAS token) with no problems.

However, I am now having problems when trying to download a blob within a container using the SAS token I have generated for the container.

With my generated SAS token I have tried the following curl command to download the blob:

curl -X GET "https://dat3473spa01cfeMtest.blob.core.windows.net/90480397-91234697-218-test-dir01/3c6a1ba9-2168-4171-8311-813e3762108b.txt&sv=2019-02-02&sr=c&sig=QlSozpknsTcR4frUK08%2FrcGaUGY893GzFN1Lyhl74Ao%3D&se=2024-10-24T07%3A50%3A11Z&sp=racwdl"

Where:

blobServiceUri: https://dat3473spa01cfeMtest.blob.core.windows.net

container name: 90480397-91234697-218-test-dir01

blob name: 3c6a1ba9-2168-4171-8311-813e3762108b.txt

SAS token for container: ?sv=2019-02-02&sr=c&sig=QlSozpknsTcR4frUK08%2FrcGaUGY893GzFN1Lyhl74Ao%3D&se=2024-10-24T07%3A50%3A11Z&sp=racwdl

When I run the curl command I get the error:

<?xml version="1.0" encoding="utf-8"?>
<Error>
    <Code>ResourceNotFound</Code>
    <Message>The specified resource does not exist.
RequestId:8feff5f9-001e-006d-5b18-260db0000000
Time:2024-10-24T13:28:25.9692381Z</Message>
</Error>

Running either of the following curl commands (replacing .txt& in my initial curl command by either .txt&? or .txt?):

curl -X GET "https://dat3473spa01cfeMtest.blob.core.windows.net/90480397-91234697-218-test-dir01/3c6a1ba9-2168-4171-8311-813e3762108b.txt&?sv=2019-02-02&sr=c&sig=QlSozpknsTcR4frUK08%2FrcGaUGY893GzFN1Lyhl74Ao%3D&se=2024-10-24T07%3A50%3A11Z&sp=racwdl"

curl -X GET "https://dat3473spa01cfeMtest.blob.core.windows.net/90480397-91234697-218-test-dir01/3c6a1ba9-2168-4171-8311-813e3762108b.txt?sv=2019-02-02&sr=c&sig=QlSozpknsTcR4frUK08%2FrcGaUGY893GzFN1Lyhl74Ao%3D&se=2024-10-24T07%3A50%3A11Z&sp=racwdl"

gives the error:

<?xml version="1.0" encoding="utf-8"?>
<Error>
    <Code>BlobNotFound</Code>
    <Message>The specified blob does not exist.
RequestId:4978f267-601e-0043-3419-26bc10000000
Time:2024-10-24T13:32:22.1650304Z</Message>
</Error>

When I list the blobs in the container with the command

curl -X GET "https://dat3473spa01cfeMtest.blob.core.windows.net/90480397-91234697-218-test-dir01?restype=container&comp=list&sv=2019-02-02&sr=c&sig=QlSozpknsTcR4frUK08%2FrcGaUGY893GzFN1Lyhl74Ao%3D&se=2024-10-24T07%3A50%3A11Z&sp=racwdl"

I get:

90480397-91234697-218-test-dir01/3c6a1ba9-2168-4171-8311-813e3762108b.txt

So the blob is listed but I cannot download it!


Solution

  • OK, I have found the problem!

    I was using the blob name as 3c6a1ba9-2168-4171-8311-813e3762108b.txt. But, strangely, the blob name should contain the container name!

    So the blob name should be:

    90480397-91234697-218-test-dir01/3c6a1ba9-2168-4171-8311-813e3762108b.txt
    

    So the curl command that worked for me is:

    curl -X GET "https://dat3473spa01cfeMtest.blob.core.windows.net/90480397-91234697-218-test-dir01/90480397-91234697-218-test-dir01/3c6a1ba9-2168-4171-8311-813e3762108b.txt?sv=2019-02-02&sr=c&sig=QlSozpknsTcR4frUK08%2FrcGaUGY893GzFN1Lyhl74Ao%3D&se=2024-10-24T07%3A50%3A11Z&sp=racwdl"