Java – why do files uploaded to S3 have content type application / octet stream unless I name the file html
•
Java
Even if I set the content type to text / HTML, it ends up as an application / octet stream on S3
ByteArrayInputStream contentsAsStream = new ByteArrayInputStream(contentAsBytes); ObjectMetadata md = new ObjectMetadata(); md.setContentLength(contentAsBytes.length); md.setContentType("text/html"); s3.putObject(new PutObjectRequest(ARTIST_BUCKET_NAME,artistId,contentsAsStream,md));
However, if I name the file, take the final as html
s3.putObject(new PutObjectRequest(ARTIST_BUCKET_NAME,artistId + ".html",md));
Then it works
Is my MD object ignored? How can I upload thousands of files over time, so I can't enter the S3 UI and repair the contenttype manually
Solution
You must do something else in your code I just tried 1.9 6. Code example of S3 SDK, which obtains the "text / HTML" content type
Here is the exact (groovy) code:
class S3Test { static void main(String[] args) { def s3 = new AmazonS3Client() def random = new Random() def bucketName = "raniz-playground" def keyName = "content-type-test" byte[] contentAsBytes = new byte[1024] random.nextBytes(contentAsBytes) ByteArrayInputStream contentsAsStream = new ByteArrayInputStream(contentAsBytes); ObjectMetadata md = new ObjectMetadata(); md.setContentLength(contentAsBytes.length); md.setContentType("text/html"); s3.putObject(new PutObjectRequest(bucketName,keyName,md)) def object = s3.getObject(bucketName,keyName) println(object.objectMetadata.contentType) object.close() } }
Program printing
The S3 metadata is the same:
The following are the communications sent over the network (provided by the Apache HTTP commons debug log):
>> PUT /content-type-test HTTP/1.1 >> Host: raniz-playground.s3.amazonaws.com >> Authorization: AWS <nope> >> User-Agent: aws-sdk-java/1.9.6 Linux/3.2.0-84-generic Java_HotSpot(TM)_64-Bit_Server_VM/25.45-b02/1.8.0_45 >> Date: Fri,12 Jun 2015 02:11:16 GMT >> Content-Type: text/html >> Content-Length: 1024 >> Connection: Keep-Alive >> Expect: 100-continue << HTTP/1.1 200 OK << x-amz-id-2: mOsmhYGkW+SxipF6S2+CnmiqOhwJ62WfWUkmZk4zU3rzkWCEH9P/bT1hUz27apmO << x-amz-request-id: 8706AE3BE8597644 << Date: Fri,12 Jun 2015 02:11:23 GMT << ETag: "6c53debeb28f1d12f7ad388b27c9036d" << Content-Length: 0 << Server: AmazonS3 >> GET /content-type-test HTTP/1.1 >> Host: raniz-playground.s3.amazonaws.com >> Authorization: AWS <nope> >> User-Agent: aws-sdk-java/1.9.6 Linux/3.2.0-84-generic Java_HotSpot(TM)_64-Bit_Server_VM/25.45-b02/1.8.0_45 >> Date: Fri,12 Jun 2015 02:11:23 GMT >> Content-Type: application/x-www-form-urlencoded; charset=utf-8 >> Connection: Keep-Alive << HTTP/1.1 200 OK << x-amz-id-2: 9U1CQ8yIYBKYyadKi4syaAsr+7BV76Q+5UAGj2w1zDiPC2qZN0NzUCQNv6pWGu7n << x-amz-request-id: 6777433366DB6436 << Date: Fri,12 Jun 2015 02:11:24 GMT << Last-Modified: Fri,12 Jun 2015 02:11:23 GMT << ETag: "6c53debeb28f1d12f7ad388b27c9036d" << Accept-Ranges: bytes << Content-Type: text/html << Content-Length: 1024 << Server: AmazonS3
This is also how source code displays our behavior - if you set the content type, the SDK will not overwrite it
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码