I'm using gsutil setmeta
to set a custom filename for downloading, by means of Content-Disposition
property (Content-Disposition: attachment; filename="filename.jpg"; filename*="filename.jpg"
).
Filenames must be enclosed in quotes. And also the argument of setmeta
has its own quotes.
If I do
gsutil setmeta -h "Content-Disposition: attachment; filename="Myname.jpg"; filename*="Myname.jpg"" gs://<path-to-file>"
is ok, unless the file name I specify in the metadata contains spaces (e.g. filename="My name.jpg"
): in this case, I get an error. Is there a way to escape the quotes, or else a way to have spaces within the download filename?
Single quotes seems not to be an option (they are shown in the file name when I download it).
EDIT:
I tried replacing spaces with %20
(cf. How to set filename containing spaces in Content-Disposition header). It's a step forward: gsutil does the job, and if I download the file with Chrome it's ok. But if I use Safari to download the file, the %20
are literaly there.
You can surround the filename in double quotes and escape any inner quotes within the filename to set a custom filename for downloading using gsutil
and the Content-Disposition
metadata. Replace any spaces in the filename with %20
to comply with URL encoding.
Here's an illustration:
gsutil setmeta -h "Content-Disposition: attachment; filename=\"My name.jpg\"; filename*=utf-8''My%20name.jpg" gs://<path-to-file>
This eliminates issues when setting a filename that contains spaces. The correct filename, "My name.jpg," without any visible quotations, will show in the downloaded image.