2016-04-20 4 views
3

So AWS konvertiert ein Leerzeichen in + für die Bucket/Datei-URL. Aber ein Dateiname, der bereits + enthält, wird als %2B codiert. Ich bin verwirrt, wie man mit diesem Fall umgeht.Wie entscheidet man, ob der Dateiname ein Pluszeichen (+) enthält?

Wenn die Eingangs URL für eine Anwendung ist:

https://s3-us-west-2.amazonaws.com/mybucket/Pul0419_32_a+b.zip 

, wie ich entscheiden, ob die Datei, die tatsächlich existiert, ist Pul0419_32_a+b.zip oder Pul0419_32_a b.zip

+0

können Sie versuchen, URI Info '$ _SERVER [ 'QUERY_STRING']' oder '$ _SERVER [ 'REQUEST_URI']' – Dolbik

+0

@Dolbik Die Daten werden gesendet als 'JSON' zusammen mit dem' Post' Anfrage abzurufen –

+2

Wenn Sie 'urldecode()' der Dateiname aus der Abfrage-String, dann was auch immer es ausgibt wird sein, wie der Dateiname aufgerufen wird. Es wird die '% 2B' in die' + 'und die' + 'in ein Leerzeichen zurück konvertieren. – Rasclatt

Antwort

1

AWS-Enthusiasten, die ich bin, muss ich zugeben, dass die Die ursprünglichen Architekten von S3 machten einen extrem unglücklichen Fehler, als sie entschieden, dass + im Pfad einer URL interpretiert werden sollte, als wäre sie äquivalent zu ASCII 0x20 ("Leerzeichen").

Das Zeichen + trägt nur dann diese Bedeutung, wenn es Teil der Abfragezeichenfolge ist. Im Pfad ist es should have been interpreted literally.

Im Pfad einer korrekt codierten und interpretierten URL entspricht +%2B.

Es gibt also keine verlässliche Antwort auf die Frage, da der Grund dafür ist, dass S3 falsche URLs falsch behandelt.

Angesichts der Tatsache, dass, wenn die Beispiel-URL von einem Browser verwendet würde, würde S3 davon ausgehen, dass diese Leerzeichen waren, würde Ihre Interessen wahrscheinlich am besten gedient, indem Sie die URL zu %2B nicht verwenden, sondern es wie in der verwenden Interaktion mit S3 ... es sei denn, praktische Erfahrung legt nahe, dass die ursprüngliche Quelle dieser URLs tatsächlich mit S3 interagiert hat und sie tatsächlich in %2B transformiert hat, ohne sie für die nachfolgende Verwendung mit konsistenter Codierung zu speichern. In diesem Fall könnte argumentiert werden, dass dies der Fall ist Ihnen etwas falsches zur Verfügung gestellt zu bekommen, aber Sie müssen sie vielleicht transformieren, aus Gründen, die eher politisch als technisch sind.

Aber, wie es scheint, Sie bereits vermuten, ist die Antwort weniger als einfach.

Verwandte Themen