Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15394088
D21125.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Referenced Files
None
Subscribers
None
D21125.diff
View Options
diff --git a/src/applications/files/controller/PhabricatorFileDataController.php b/src/applications/files/controller/PhabricatorFileDataController.php
--- a/src/applications/files/controller/PhabricatorFileDataController.php
+++ b/src/applications/files/controller/PhabricatorFileDataController.php
@@ -142,6 +142,10 @@
(string)$request_uri);
}
+ if ($this->shouldCompressFileDataResponse($file)) {
+ $response->setCompressResponse(true);
+ }
+
return $response;
}
@@ -224,4 +228,51 @@
return $this->file;
}
+ private function shouldCompressFileDataResponse(PhabricatorFile $file) {
+ // If the client sends "Accept-Encoding: gzip", we have the option of
+ // compressing the response.
+
+ // We generally expect this to be a good idea if the file compresses well,
+ // but maybe not such a great idea if the file is already compressed (like
+ // an image or video) or compresses poorly: the CPU cost of compressing and
+ // decompressing the stream may exceed the bandwidth savings during
+ // transfer.
+
+ // Ideally, we'd probably make this decision by compressing files when
+ // they are uploaded, storing the compressed size, and then doing a test
+ // here using the compression savings and estimated transfer speed.
+
+ // For now, just guess that we shouldn't compress images or videos or
+ // files that look like they are already compressed, and should compress
+ // everything else.
+
+ if ($file->isViewableImage()) {
+ return false;
+ }
+
+ if ($file->isAudio()) {
+ return false;
+ }
+
+ if ($file->isVideo()) {
+ return false;
+ }
+
+ $compressed_types = array(
+ 'application/x-gzip',
+ 'application/x-compress',
+ 'application/x-compressed',
+ 'application/x-zip-compressed',
+ 'application/zip',
+ );
+ $compressed_types = array_fuse($compressed_types);
+
+ $mime_type = $file->getMimeType();
+ if (isset($compressed_types[$mime_type])) {
+ return false;
+ }
+
+ return true;
+ }
+
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Mar 16, 11:20 PM (1 w, 52 m ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7389113
Default Alt Text
D21125.diff (2 KB)
Attached To
Mode
D21125: Compress file downloads if the client sends "Accept-Encoding: gzip" and we guess the file might compress alright
Attached
Detach File
Event Timeline
Log In to Comment