問題があるダウンロード:破損したZIPファイルには、私のようなものを持っているRESTサービスからzipファイルをダウンロードした後、
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Disposition: attachment; filename=Report_request_2681.zip
Content-Type: application/octet-stream
Content-Length: 1843
Date: Tue, 24 May 2016 15:24:39 GMT
PK etc etc... my real zip file bytes
生成されたzipファイルが正しいか(直接からそれをコピーしてみましたサーバー、サイズは1843バイトです)、エラーはダウンロード方法にあります(HTTPヘッダーをファイルに追加するので、最終サイズは1843バイト+ヘッダー部分です)。私はresteasy 2.1.0 GA
を使用してい
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Path("/download/{fileName}")
Response getRequestedFile(
@Context HttpServletRequest httpRequest,
@PathParam("fileName") String fileName
);
//... bla bla bla method and authentication stuff
//Prepare a file object with file to return
File file = new File(myPath);
if (!file.exists()) {
return Response.status(Response.Status.NOT_FOUND).build();
}
try {
return Response.ok(FileUtils.readFileToByteArray(file), MediaType.APPLICATION_OCTET_STREAM_TYPE).header("Content-Disposition", "attachment; filename=\"" + cleanFileName + "\"").build();
} catch (IOException ex) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
(と私はそれをアップグレードすることはできません):ここでは私のresteasy
実装です(私は非影響力のある部分を削除しました)。方法readFileToByteArray
はorg.apache.commons.io.FileUtils
から取られます。私はコンテンツをtext/plainまたはapplication/zipに設定し、FileInputStreamをResponseに渡そうとしましたが、問題は解決しません。任意のヒント?
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Disposition: attachment; filename="Report_request_2681"
Content-Type: application/octet-stream
Content-Length: 16550
Date: Wed, 25 May 2016 07:03:20 GMT
...rest of my txt file
編集:
ああ、私はまた、私はHTTPレスポンスヘッダを持ってダウンロードしたファイルの開始時に、単純なテキストファイル...同じ問題をREST方式を経由してダウンロードを試してみました:質問の統合コメント情報。
あなたは「本当のzipファイルバイト」を取得していると言います。そのバイトと元のzipファイルの違いは何ですか?彼らは同じ長さですか? –
Content-Lengthはファイルサイズと一致していますか? application/octet-streamを使っても問題ありません。バイトは大丈夫です(PK ...)。手動アップロードとダウンロードはFTPをバイナリモードではなくテキストモードで使用します。これは '\ n'と' \ r \ n'の間で変換されます。他のファイルを試してください。 –
ファイル(ヘッダー部分を除く)は1843バイトです。私はRESTサービス経由でダウンロードせずに、サーバーから直接取得して確認しました。その部分は疑いの余地なくresteasyによって追加されます。 –