2017-12-19 25 views
0

何らかの理由で、nodeJSで生成されたzipファイルが、「バイナリ」データアップロードのみを使用できるJavaサーバーで拒否されます。nodejs(リクエスト)からjava(ZipInputStream)にバイナリデータを送信

バイナリを使用してPostmanでファイルを投稿すると正常に動作しますが、nodeJS(request/request-promise/http ...など)を経由して送信すると動作しません。

それは与える:

java.util.zip.ZipException: only DEFLATED entries can have EXT descriptor 
     at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:310) 
     at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:122) 
     at com.ws... 

ファイルが

答えて

0

は、この問題にほぼ2日間過ごした(!それは郵便配達を経て受け入れる)有効です。スタックオーバーフローポストのトンを読んでください(そのほとんどはこの特定のトピックで適切な答えがありませんでした)。

他の誰かが、これは本当に厄介な問題に陥った場合には

...私は試しに保ち、うまく動作するように見えた唯一の解決策は、子プロセスとカールを使用している

:私は

var exec = require('child_process').exec; 

var args = "-X POST \ 
    https://mywebsite.com/zip-upload \ 
    -H 'Authorization: Bearer gFChWxzeCIZVLM2q...WlvDB6zq2uOHfUcdX' \ 
    -H 'Cache-Control: no-cache' \ 
    -H 'Content-Type: application/zip' \ 
    --data-binary @./data.zip"; 

exec('curl ' + args, function (error, stdout, stderr) { 
    console.log('stdout: ' + stdout); 
    console.log('stderr: ' + stderr); 
    if (error !== null) { 
    console.log('exec error: ' + error); 
    } 
}); 
0

意見、child_processが最後の選択です。あなたは要求または要求-約束を試してみましたが、どのようにhtpしようについて、失敗した場合:

const htp = require('htp'); 
htp.post(
    "https://mywebsite.com/zip-upload", 
    { "Authorization" : "earer gFChWxzeCIZVLM2q...WlvDB6zq2uOHfUcdX" 
    , "Cache-Control" : "no-cache" 
    , "Content-Type" : "application/zip" 
    }, 
    fs.createReadStream("./data.zip") 
) 
.then(function(response) { /* ... */ }) 
.catch(function(error) { /* ... */ }) 
; 
+0

おかげで、これはバイナリとしてデータを送信することはできません。 (タイトルとカールのフラグを参照) – ShQ

関連する問題