Feature #60221
Read FAL resources in chunks
Status: | New | Start date: | 2014-07-10 | |
---|---|---|---|---|
Priority: | Could have | Due date: | ||
Assigned To: | - | % Done: | 0% |
|
Category: | File Abstraction Layer (FAL) | Spent time: | - | |
Target version: | 7.4 (Backend) | |||
PHP Version: | Sprint Focus: | |||
Complexity: |
Description
Usually file layers like the Linux file system support a basic common set of IO operations.
If you ever have to implement a file system in linux or you are going to implement a java class implementing the file interface you will notice that you will have to implement the following methods:
open()
close()
read()
seek()
tell()
write()
... of course there are a few others like "size()" and for handling access control.
currently FAL only supports open/close as making an instance of the "File" object could get seen as a call to open().
This issue suggests to add additional methods to File() which allows those basic operations.
For the LocalDriver a fopen()/filehandle in the constructor and wrappers for fread/fwrite/fseek/ftell would be sufficient.
Driver for S3 Amazon could for example manage internal position pointers and use the "Range" header to retrieve requested chunks from the storage (http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html)
History
#1 Updated by Markus Klein about 1 year ago
Does this method from the File class fulfill your needs?
/** * Returns a path to a local version of this file to process it locally (e.g. with some system tool). * If the file is normally located on a remote storages, this creates a local copy. * If the file is already on the local system, this only makes a new copy if $writable is set to TRUE. * * @param boolean $writable Set this to FALSE if you only want to do read operations on the file. * * @throws \RuntimeException * @return string */ public function getForLocalProcessing($writable = TRUE) { if ($this->deleted) { throw new \RuntimeException('File has been deleted.', 1329821486); } return $this->getStorage()->getFileForLocalProcessing($this, $writable); }
If you set $writeable = FALSE you will get the absolute path to the file (if the LocalDriver is used).
You can do with this path whatever you like.
#2 Updated by Bernhard Kraft about 1 year ago
This issue is marked as feature and could have. So its rather an idea/suggestion than a pressing requirement!
I don't like to handle FileObjects using different drivers specifically. Usually I try to write code which works on any driver.
The reason for this issue is just a proposal. For example when working with large files (CSV, etc.) this could be useful.
#3 Updated by Mathias Schreiber 7 months ago
- Target version changed from 7.0 to 7.1 (Cleanup)
#4 Updated by Benjamin Mack about 1 month ago
- Target version changed from 7.1 (Cleanup) to 7.4 (Backend)