GZIPOutputStreamクラスを使用してイメージをGZIPに変換しています。 GZIPファイルをOutputStream経由で送信しようとすると、破損したファイルが表示されます。私はFileOutputStreamへのGZIPの方法を知っています。次のコードは完璧に動作します:GZIPファイルをJavaで出力してOutputStream経由で送信する方法
Static private void GZIPCompress(String fileName)
{
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[(int) file.length()];
fis.read(data);
FileOutputStream fos = new FileOutputStream(fileName + ".gz");
GZIPOutputStream gzos = new GZIPOutputStream(fos);
gzos.write(data);
fos.close();
fis.close();
}
出力ファイルがmyfile.png.gzで、次の詳細があります
myfile.png.gz:FATファイルシステムからのgzip圧縮されたデータを、( MS-DOS、OS/2、 NT)
私は、ファイルをgzipとのOutputStreamに送信しようとすると、私の問題はあります。私はサーバで作業しているので、私はサーバからこれを呼び出しています。ソケットを使用しています。
Static void SendGZIPFile(String fileName, OutputStream os)
{
DataOutputStream dos = new DataOutputStream(os);
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
byte[] data = new byte[(int) file.length()];
byte[] dataAux = new byte[(int) file.length()];
dos.writeBytes("HTTP/1.1 200 OK\r\n");
dos.writeBytes("Content-Type: application/x-gzip \r\n");
dos.writeBytes("Content-Disposition: form-data; filename="+"\""+fileName+".gz"+"\""+"\n");
dos.writeBytes("\r\n\r\n");
dos = new DataOutputStream(new GZIPOutputStream(os));
fis.read(data);
dos.write(data);
dos.close();
fis.close();
gzos.close();
}
私は何を取得することは何も含まれていない破損したGZIPファイルは次のとおりです。
myfile.gzデータ
私は私が何か間違ったことをやっていると思う:ここ詳細がありますGZIPを使っている間に、の詳細の違いに気付いたので私は次のコマンドを使用して取得します。file myfile.gz
ただ、関心のうち、なぜあなたは、手動でHTTPを行う代わりに使用していますライブラリ/フレームワーク? – RAnders00
PNGは既に圧縮されているので、GZIPにも同様にそれを大きくする可能性があります。 –
'SendGZIPFile(fileName、outputStream)'を呼び出す部分も表示できますか? – RAnders00