2016-04-14 11 views
0

私はダウンロード機能を持つAzureでホストされているサイトで作業しています。サーバーの負荷を軽減するために、共有アクセス署名を使用してダウンロードが行われます。ただし、Safariではファイルをダウンロードするときにファイル名が「myFile.txt」としてmyFile.txtをダウンロードする場合と同様に、単一引用符で囲まれます。これにより、ダウンロードされているzipをクライアントが名前を変更して内容を抽出できるようになりました。次のように生成された共有アクセス署名のためのAzure Storageからダウンロードファイル名の前後に一重引用符を追加

コードは次のとおりです。

 CloudBlockBlob blob = container.GetBlockBlobReference(Helpers.StringHelper.TrimIfNotNull(blobName)); 
     if (!blob.Exists()) 
     { 
      return string.Empty; 
     } 

     var sasConstraints = new SharedAccessBlobPolicy(); 
     sasConstraints.SharedAccessStartTime = DateTime.UtcNow.AddSeconds(-5); 
     sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.Add(duration); 
     sasConstraints.Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write; 

     var headers = new SharedAccessBlobHeaders(); 
     string filename = blobName; 
     if (filename.Contains("/")) 
     { 
      filename = blobName.Substring(blobName.LastIndexOf("/") + 1, blobName.Length - blobName.LastIndexOf("/") - 1); 
     } 
     headers.ContentDisposition = "attachment; filename='" + filename + "'"; 

     //Generate the shared access signature on the blob, setting the constraints directly on the signature. 
     string sasBlobToken = blob.GetSharedAccessSignature(sasConstraints, headers); 

     //Return the URI string for the container, including the SAS token. 
     return blob.Uri + sasBlobToken; 

このコードは、クロム、Firefox、およびIEで正常に働いています。私がヘッダーに欠けているものはありますか?私が修正している唯一のものはコンテンツの処分です。

答えて

1

RFC2616で概説されているように、HTTPヘッダーの引用符付き文字列には二重引用符を使用する必要があります。

ので

headers.ContentDisposition = "attachment; filename=\"" + filename + "\""; 

headers.ContentDisposition = "attachment; filename='" + filename + "'"; 

を交換

関連する問題