Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15388246
D18953.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
3 KB
Referenced Files
None
Subscribers
None
D18953.diff
View Options
diff --git a/src/applications/files/storage/PhabricatorFile.php b/src/applications/files/storage/PhabricatorFile.php
--- a/src/applications/files/storage/PhabricatorFile.php
+++ b/src/applications/files/storage/PhabricatorFile.php
@@ -272,8 +272,12 @@
$file->setByteSize($length);
// NOTE: Once we receive the first chunk, we'll detect its MIME type and
- // update the parent file. This matters for large media files like video.
- $file->setMimeType('application/octet-stream');
+ // update the parent file if a MIME type hasn't been provided. This matters
+ // for large media files like video.
+ $mime_type = idx($params, 'mime-type');
+ if (!strlen($mime_type)) {
+ $file->setMimeType('application/octet-stream');
+ }
$chunked_hash = idx($params, 'chunkedHash');
diff --git a/src/applications/files/uploadsource/PhabricatorFileUploadSource.php b/src/applications/files/uploadsource/PhabricatorFileUploadSource.php
--- a/src/applications/files/uploadsource/PhabricatorFileUploadSource.php
+++ b/src/applications/files/uploadsource/PhabricatorFileUploadSource.php
@@ -6,6 +6,8 @@
private $name;
private $relativeTTL;
private $viewPolicy;
+ private $mimeType;
+ private $authorPHID;
private $rope;
private $data;
@@ -51,6 +53,24 @@
return $this->byteLimit;
}
+ public function setMIMEType($mime_type) {
+ $this->mimeType = $mime_type;
+ return $this;
+ }
+
+ public function getMIMEType() {
+ return $this->mimeType;
+ }
+
+ public function setAuthorPHID($author_phid) {
+ $this->authorPHID = $author_phid;
+ return $this;
+ }
+
+ public function getAuthorPHID() {
+ return $this->authorPHID;
+ }
+
public function uploadFile() {
if (!$this->shouldChunkFile()) {
return $this->writeSingleFile();
@@ -245,6 +265,16 @@
$parameters['ttl.relative'] = $ttl;
}
+ $mime_type = $this->getMimeType();
+ if ($mime_type !== null) {
+ $parameters['mime-type'] = $mime_type;
+ }
+
+ $author_phid = $this->getAuthorPHID();
+ if ($author_phid !== null) {
+ $parameters['authorPHID'] = $author_phid;
+ }
+
return $parameters;
}
diff --git a/src/applications/search/controller/PhabricatorApplicationSearchController.php b/src/applications/search/controller/PhabricatorApplicationSearchController.php
--- a/src/applications/search/controller/PhabricatorApplicationSearchController.php
+++ b/src/applications/search/controller/PhabricatorApplicationSearchController.php
@@ -461,15 +461,20 @@
$export_result = $format->newFileData();
- $file = PhabricatorFile::newFromFileData(
- $export_result,
- array(
- 'name' => $filename,
- 'authorPHID' => $viewer->getPHID(),
- 'ttl.relative' => phutil_units('15 minutes in seconds'),
- 'viewPolicy' => PhabricatorPolicies::POLICY_NOONE,
- 'mime-type' => $mime_type,
- ));
+ // We have all the data in one big string and aren't actually
+ // streaming it, but pretending that we are allows us to actviate
+ // the chunk engine and store large files.
+ $iterator = new ArrayIterator(array($export_result));
+
+ $source = id(new PhabricatorIteratorFileUploadSource())
+ ->setName($filename)
+ ->setViewPolicy(PhabricatorPolicies::POLICY_NOONE)
+ ->setMIMEType($mime_type)
+ ->setRelativeTTL(phutil_units('60 minutes in seconds'))
+ ->setAuthorPHID($viewer->getPHID())
+ ->setIterator($iterator);
+
+ $file = $source->uploadFile();
return $this->newDialog()
->setTitle(pht('Download Results'))
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mar 16 2025, 3:31 AM (5 w, 3 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7564519
Default Alt Text
D18953.diff (3 KB)
Attached To
Mode
D18953: Support export of data in files larger than 8MB
Attached
Detach File
Event Timeline
Log In to Comment