TRose
TRose

Reputation: 1738

How does one determine the filetype on an AWS S3 hosted file without the extension?

As an example, I'm currently uploading items directly to an S3 bucket using a form. While I was testing, I didn't specify any expected filenames or extensions.

I uploaded a .png which produced this direct link:

https://s3-us-west-2.amazonaws.com/easyhighlighting2/2015-07-271438019663927upload94788

When I place this inside an img tag, it displays on a web page properly.

My question is, without an extension, how would my browser know what type of file it's loading? Inside the bucket, the file's metadata isn't even filled out.

Is there any way to get that file extension, programmatically?

I'm ready to try any clientside methods available; my server-side language is ColdFusion which is somewhat limiting, but I'm open to suggestions for that as well.

Upvotes: 5

Views: 11871

Answers (2)

ma11hew28
ma11hew28

Reputation: 126507

Check the Content-Type HTTP response header returned by Amazon S3.

For example, curl -I https://s3.amazonaws.com/path/to/file fetches only the headers.

Upvotes: 3

TRose
TRose

Reputation: 1738

Okay, so after some more extensive digging, I found a method of retrieving the file's type that was only added since CF10 was released; that would explain the lack of documentation.

The answer lies in the FileGetMimeType function.

<cfset someVar = "https://s3-us-west-2.amazonaws.com/easyhighlighting2/2015-07-271438019663927upload94788">
<cfset FileType = FileGetMimeType(someVar)>
<cfoutput>#FileType#</cfoutput>

This code would output image/png - which is correct and has worked for every filetype I have tested thus far.

I'm surprised this kind of question hasn't popped up before, but this appears to be the best answer, at least for users of CFML.

Edit:

ColdFusion accomplishes this by either reading the contents of a file, or by trusting its extension. An implicit attribute, 'strict', is used in this function. If true, it reads the file's contents. If false, it uses the provided extension.

True is the default.

Link:

https://wikidocs.adobe.com/wiki/display/coldfusionen/FileGetMimeType

Upvotes: 5

Related Questions