diff options
author | zotlabs <mike@macgirvin.com> | 2017-11-22 20:24:43 -0800 |
---|---|---|
committer | zotlabs <mike@macgirvin.com> | 2017-11-22 20:24:43 -0800 |
commit | c96f1dbbe22edf5a71170a7a39dd7b6fcea938f5 (patch) | |
tree | e0aff2a37fa037fc9b68c584726cbe565c5ecf0c | |
parent | 8fcf16ee63c86667afe5646ea46d56dd1c96aa08 (diff) | |
download | volse-hubzilla-c96f1dbbe22edf5a71170a7a39dd7b6fcea938f5.tar.gz volse-hubzilla-c96f1dbbe22edf5a71170a7a39dd7b6fcea938f5.tar.bz2 volse-hubzilla-c96f1dbbe22edf5a71170a7a39dd7b6fcea938f5.zip |
mod_file_upload: provide a handler for chunked uploads for when we eventually support this on the client side
-rw-r--r-- | Zotlabs/Module/File_upload.php | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/Zotlabs/Module/File_upload.php b/Zotlabs/Module/File_upload.php index 5c4b9a502..e99118417 100644 --- a/Zotlabs/Module/File_upload.php +++ b/Zotlabs/Module/File_upload.php @@ -47,6 +47,46 @@ class File_upload extends \Zotlabs\Web\Controller { } } else { + + $matches = []; + $partial = false; + + $x = preg_match('/bytes (\d*)\-(\d*)\/(\d*)/',$_SERVER['HTTP_CONTENT_RANGE'],$matches); + if($x) { + // logger('Content-Range: ' . print_r($matches,true)); + $partial = true; + } + + if($partial) { + $x = save_chunk($channel,$matches[1],$matches[2],$matches[3]); + if($x['partial']) { + header('Range: bytes=0-' . (($x['length']) ? $x['length'] - 1 : 0)); + json_return_and_die($result); + } + else { + header('Range: bytes=0-' . (($x['size']) ? $x['size'] - 1 : 0)); + + $_FILES['userfile'] = [ + 'name' => $x['name'], + 'type' => $x['type'], + 'tmp_name' => $x['tmp_name'], + 'error' => $x['error'], + 'size' => $x['size'] + ]; + } + } + else { + if(! array_key_exists('userfile',$_FILES)) { + $_FILES['userfile'] = [ + 'name' => $_FILES['files']['name'], + 'type' => $_FILES['files']['type'], + 'tmp_name' => $_FILES['files']['tmp_name'], + 'error' => $_FILES['files']['error'], + 'size' => $_FILES['files']['size'] + ]; + } + } + $r = attach_store($channel, get_observer_hash(), '', $_REQUEST); if($r['success']) { $sync = attach_export_data($channel,$r['data']['hash']); |