为什么上传到带有自定义文件扩展名的 azure blob 容器的 gzip 文件通过生成的 sas 下载为 .gz?
Why the gzipped file uploaded to the azure blob container with a custom file extension is being downloaded as .gz via the generated sas?
这是我生成 SAS 的方法:
private string GenerateSasBlob(BlobClient blobClient)
{
BlobSasBuilder sasBuilder = new BlobSasBuilder()
{
BlobContainerName = blobClient.GetParentBlobContainerClient().Name,
BlobName = blobClient.Name,
Resource = "b",
StartsOn = DateTimeOffset.UtcNow,
ExpiresOn = DateTimeOffset.UtcNow.AddMonths(1),
Protocol = SasProtocol.Https,
ContentType = "mygzip"
};
sasBuilder.SetPermissions(BlobSasPermissions.Read);
return blobClient.GenerateSasUri(sasBuilder).ToString();
}
我认为通过指定 ContentType 可以修复它,但是生成的 sas 仍然下载为 .gz 而不是预期的 .mygzip。
虽然并排查看压缩文件中的内容是相同的,但我需要的是下载时应该是 .mygzip。知道怎么做吗?
考虑到您希望使用不同的扩展名(mygzip 而不是 gz)下载 blob,基本上您希望使用不同的名称下载 blob。
在这种情况下,您想要覆盖的响应 header 是 Content-Disposition
而不是 Content-Type
。
你的代码应该是这样的:
private string GenerateSasBlob(BlobClient blobClient)
{
var newBlobName = blobClient.Name.Replace(".gz", ".mygzip");//Change the extension here in the name
BlobSasBuilder sasBuilder = new BlobSasBuilder()
{
BlobContainerName = blobClient.GetParentBlobContainerClient().Name,
BlobName = blobClient.Name,
Resource = "b",
StartsOn = DateTimeOffset.UtcNow,
ExpiresOn = DateTimeOffset.UtcNow.AddMonths(1),
Protocol = SasProtocol.Https,
ContentDisposition = $"attachment; filename=\"{newBlobName}\""
};
sasBuilder.SetPermissions(BlobSasPermissions.Read);
return blobClient.GenerateSasUri(sasBuilder).ToString();
}
现在,当用户单击 SAS URL 时,将下载带有“mygzip”扩展名的 blob。
有关 Content-Disposition header 的更多信息可在此处找到:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition。
这是我生成 SAS 的方法:
private string GenerateSasBlob(BlobClient blobClient)
{
BlobSasBuilder sasBuilder = new BlobSasBuilder()
{
BlobContainerName = blobClient.GetParentBlobContainerClient().Name,
BlobName = blobClient.Name,
Resource = "b",
StartsOn = DateTimeOffset.UtcNow,
ExpiresOn = DateTimeOffset.UtcNow.AddMonths(1),
Protocol = SasProtocol.Https,
ContentType = "mygzip"
};
sasBuilder.SetPermissions(BlobSasPermissions.Read);
return blobClient.GenerateSasUri(sasBuilder).ToString();
}
我认为通过指定 ContentType 可以修复它,但是生成的 sas 仍然下载为 .gz 而不是预期的 .mygzip。
虽然并排查看压缩文件中的内容是相同的,但我需要的是下载时应该是 .mygzip。知道怎么做吗?
考虑到您希望使用不同的扩展名(mygzip 而不是 gz)下载 blob,基本上您希望使用不同的名称下载 blob。
在这种情况下,您想要覆盖的响应 header 是 Content-Disposition
而不是 Content-Type
。
你的代码应该是这样的:
private string GenerateSasBlob(BlobClient blobClient)
{
var newBlobName = blobClient.Name.Replace(".gz", ".mygzip");//Change the extension here in the name
BlobSasBuilder sasBuilder = new BlobSasBuilder()
{
BlobContainerName = blobClient.GetParentBlobContainerClient().Name,
BlobName = blobClient.Name,
Resource = "b",
StartsOn = DateTimeOffset.UtcNow,
ExpiresOn = DateTimeOffset.UtcNow.AddMonths(1),
Protocol = SasProtocol.Https,
ContentDisposition = $"attachment; filename=\"{newBlobName}\""
};
sasBuilder.SetPermissions(BlobSasPermissions.Read);
return blobClient.GenerateSasUri(sasBuilder).ToString();
}
现在,当用户单击 SAS URL 时,将下载带有“mygzip”扩展名的 blob。
有关 Content-Disposition header 的更多信息可在此处找到:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition。