[ 
https://issues.apache.org/jira/browse/TIKA-2849?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16822048#comment-16822048
 ] 

Tim Allison commented on TIKA-2849:
-----------------------------------

It's tricky because we want to put the open package back on the parent 
TikaInputStream if there is success.

How about adding a {{public Path getPath(int maxBytes) throws IOException}} to 
TikaInputStream?  This would return null or (throw an IOException?) if it 
didn't copy the full stream? 

{noformat}
    public Path getPath(int maxBytes) throws IOException {
        if (path == null) {
            if (position > 0) {
                throw new IOException("Stream is already being read");
            } else {
                path = tmp.createTempFile();
                if (maxBytes > -1) {
                    try (InputStream lookAhead = new LookaheadInputStream(in, 
maxBytes)) {
                        Files.copy(lookAhead, path, REPLACE_EXISTING);
                        if (Files.size(path) >= maxBytes) {
                            return null;
                        }
                    }
                } else {
                    // Spool the entire stream into a temporary file
                    Files.copy(in, path, REPLACE_EXISTING);
                }
{noformat}

> TikaInputStream copies the input stream locally
> -----------------------------------------------
>
>                 Key: TIKA-2849
>                 URL: https://issues.apache.org/jira/browse/TIKA-2849
>             Project: Tika
>          Issue Type: Bug
>    Affects Versions: 1.20
>            Reporter: Boris Petrov
>            Assignee: Tim Allison
>            Priority: Major
>
> When doing "tika.detect(stream, name)" and the stream is a "TikaInputStream", 
> execution gets to "TikaInputStream#getPath" which does a "Files.copy(in, 
> path, REPLACE_EXISTING);" which is very, very bad. This input stream could 
> be, as in our case, an input stream from a network file which is tens or 
> hundreds of gigabytes large. Copying it locally is a huge waste of resources 
> to say the least. Why does it do that and can I make it not do it? Or is this 
> something that has to be fixed in Tika?



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to