AWS php sdkを使用してURL文字列を取得すると、ファイル名に二重引用符が含まれているとXMLエラーが発生します。 S3に格納されている実際のファイル名には二重引用符は含まれません。しかし、エンドユーザーは、ファイル(この場合はPDF)をユーザーフレンドリーな名前でダウンロードできるようにしたかったのです。この場合S3 URLに二重引用符を含むファイル名が無効な引数につながる
、ファイル名は次のとおりです。二重引用符は、長さインジケータ(インチ、US)として使用されていることを
3" PVC Lines
注意してください。二重引用符を何かに置き換えても、ユーザーフレンドリーな名前は作成されません。
ここは、私が使用していたコードです:
$s3CMD = $s3Client->getCommand('GetObject', [
'Bucket' => $bucketName,
'Key' => $actualBucketFileName,
'ResponseContentDisposition' => 'filename="' . $systemFileName . '"'
]);
$s3Request = $s3Client->createPresignedRequest($s3CMD, '+20 minutes');
$fileUploadNameURL = (string) $s3Request->getUri();
をMySQLの(上記の '$ systemFileName' で指定)に保存されたファイル名は次のとおりです。S3バケットで
3" PVC Lines.pdf
、それは何か
47258252485.pdf
のように私が取得XMLエラーは次のとおりです。
エンドユーザーに有益ではありません3- PVC Lines.pdf
:二重引用符の前にスラッシュを追加しようとするは
<Error>
<Code>InvalidArgument</Code>
<Message>Header value contained an open quoted span.</Message>
<ArgumentName>response-content-disposition</ArgumentName>
<ArgumentValue>
filename="3" PVC Lines.pdf"
</ArgumentValue>
このファイル名を生成します。
したがって、質問では、引数ResponseContentDispositionのファイル名として二重引用符を使用することはできますか?いくつかの試行錯誤の後
おかげ
ファイル名に '' 'を入れるのは悪い考えですが、RFC-2183で始まって後方に働くと正しい解決策がバックスラッシュでエスケープされるように見えます...' filename = "3 \" PVC Lines.pdf "。 –
@ Michael-sqlbot - 二重引用符を追加するのは良い考えではないということは間違いありません。実際、Windowsでは、エクスプローラで名前を変更しようとすると直接追加できません。しかし、2つの一重引用符を追加すると効果があります。あなたの 'filename =" 3 \ "PVC'の解決策に関しては、ファイルをダウンロードするときにダッシュが追加されますが、このシナリオでは役立ちません。 –
おそらく私の提案が実際に働くのでダッシュが起こっています。そして、引用符はファイル名では有効ではないのでブラウザによって削除されます。あなたのダブルクォートハックは視覚的には説得力がありますが間違っていてユーザに問題を引き起こす可能性があります。「インチ」や略語「3インチPVC」や「3インチPVC」という言葉を使うと、より良い解決策。 –