2016-07-06 17 views
3

上の無効なファイル私はこれでバイナリファイル(具体的にはPDF)をアップロードしようとしているが、JS-スニペットを:私はサーバーサイド(Java)のオンファイルのアップロード:サーバー

function uploadFile() { 
    var reader = new FileReader(); 
    var file = document.getElementById('uploadInput').files[0]; 
    console.log(file.size); 
    var xhr = new XMLHttpRequest(); 

    xhr.open('POST', 'custom?id=upload'); 
    xhr.setRequestHeader("Content-Type", "application/pdf"); 
    xhr.overrideMimeType('application/pdf'); 
    reader.onload = function(evt) { 
     xhr.send(evt.target.result); 
    }; 
    reader.readAsBinaryString(file); 
} 

要求を受け取り、ファイルをディスクに書き込む。
しかし、予想される〜3MBの代わりに〜4MBが得られます。これは、PDFを開くときに空白のページしかないという効果があります。

着信要求のヘッダーには〜4MBのContent-Lengthも指定されています。したがって、クライアントサイドに何か問題が発生しているとはかなり確信しています。
プレーンテキストファイルを送信することはまったく問題はありません。

JavaScriptを書いてウェブで働くことは私の毎日の仕事の分野ではないので、何か根本的に間違ったことをする可能性は非常に高いです。

答えて

2

私はあなたが試すことができる2つのことを疑うになります。

  • チェックMIMEタイプをプロセスの両端に、それは何らかの形で台無しに取得した場合、あなたが
  • あなたのアップロードがXMLHttpRequestをに包まれますあなたの答えを持っています - Base64エンコード/デコードを手動で行う必要があるかもしれません。

これがうまくいけば、幸いです!

0

ソリューションを見つけました。データを送信する前にBase64で明示的にエンコードし、受信側で適切にデコードしてください。

function uploadFile() { 
    var reader = new FileReader(); 
    var file = document.getElementById('uploadInput').files[0]; 
    console.log(file.size); 
    var xhr = new XMLHttpRequest(); 

    xhr.open('POST', 'custom?id=upload'); 
    xhr.setRequestHeader("Content-Type", "text/plain; charset=x-user-defined"); 
    xhr.overrideMimeType('text/plain; charset=x-user-defined'); 
    reader.onload = function(evt) { 
     var encoded = window.btoa(evt.target.result); 
     xhr.send(encoded); 
    }; 
    reader.readAsBinaryString(file); 
} 

私は同じ問題を抱えて、誰もが、私の解決策を知っているように、これを書いています。

関連する問題