Hello,

Wondering if anyone could point me to the right way of streaming a .zip file: 
my goal is to stream a zipped version of the index. I zip up the index files I 
get from calling IndexCommit#getFileNames, and then attempt to stream using a 
custom handler with the following in handleRequestBody:

File targetZip = new File({pathToMyZipFile}));
ModifiableSolrParams params = new ModifiableSolrParams(req.getParams());
params.set(CommonParams.WT, "raw");
req.setParams(params);

ContentStreamBase content = new ContentStreamBase.FileStream(targetZip);
content.setContentType("application/zip");
rsp.add(RawResponseWriter.CONTENT, content);

I'm able to open the zip file (targetZip) and see the contents. However, I'm 
having trouble getting there on the receiving end, where I try reading the file 
by doing essentially the same as below:

        BufferedReader reader = null;
        BufferedWriter writer = null;
        try {
            InputStream is = content.getStream();
            reader = new BufferedReader(new InputStreamReader(is, 
ContentStreamBase.DEFAULT_CHARSET));
            File temp = File.createTempFile("myFile", ".zip");
            writer = new BufferedWriter(new OutputStreamWriter(new 
FileOutputStream(temp), ContentStreamBase.DEFAULT_CHARSET));
            String currentLine;
            while((currentLine = reader.readLine()) != null) {
                writer.write(currentLine);
                writer.newLine();
            }

            writer.close();
        } catch (Exception x) {
            x.printStackTrace();
        } finally {
            IOUtils.closeQuietly(reader);
            IOUtils.closeQuietly(writer);
        }

Resulting "temp" file ends up being corrupted. If I try reading it using 
ZipInputStream, I do see expected ZipEntry in it (in my case, the segments_# 
file), but it has a size 0. Hoping my issue has something to do with the 
contentType/encoding, but haven't been able to pinpoint the exact problem. 
Please let me know if you have ideas.

Thanks!

Reply via email to