2011-12-19 9 views
0

PHPを使用できないため、私は自分のウェブサイトにファイルアップローダーを持っています。私はJSPページを使用しています。 メインページでは、非表示のiframeを使用して、アップロードを処理する2番目のjspページにデータをポストします。ただし、アップロードされた画像は常に破損しています。具体的には、元のファイルよりサイズが大きくなっています。 ヒントやヒントがあれば幸いです。 メインページコード:同じファイルのrequest.getInputStreamでさまざまな長さを受け取ります

<form id="uploadForm"> 
    <input type="file" name="datafile" /></br> 
    <input type="button" value="upload" onClick="fileUpload(document.getElementById('uploadForm'),'single_upload_page.jsp','upload'); return false;" > 
</form> 

フォームに関するファイルアップロードのためのコード:

form.setAttribute("target","upload_iframe"); 
form.setAttribute("action", action_url); 
form.setAttribute("method","post"); 
form.setAttribute("enctype","multipart/form-data"); 
form.setAttribute("encoding","multipart/form-data"); 

// Submit the form... 
form.submit(); 

アップロードを処理するコード:

DataInputStream in = new DataInputStream(request.getInputStream()); 
int dataLength = request.getContentLength(); 

ためDATALENGTH Iの様々な大きさの」 request.getInputStreamが余分なデータを受け取ると仮定しています。

私は、私がより多くの情報を必要とする場合は、私が重要であると思うコードを掲載した、またはあなたが何か情報が必要な場合は尋ねることを躊躇しないでください。

答えて

0

単純な要求

問題がrequest.getContentLength(ある)は、ヘッダとすべてを含む、全体リクエストの長さを与えます。

Content-Lengthヘッダーの値を検索し、Longに変換する必要があります。これが適切なサイズです。

入手できない場合(使用できない場合もあります)、単純に入力ストリーム全体を消費します。もちろん、ファイルサイズは分かりません。

マルチパートリクエストとにかく

...あなたのフォームはあなたが必要とする1(ファイルの一部)を見つけ、それを読んで、すべてのさまざまな部分を解析するために、いくつかのライブラリを使用する必要がありますマルチパート/フォームのデータがあるとして、 。 commons-fileuploadを使用できます。現実の生活から

サンプル「

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse resp) 
     throws ServletException, IOException 
{ 
     // (....) 
     FileItemFactory factory = new DiskFileItemFactory(); 
     ServletFileUpload sfu = new ServletFileUpload(factory); 
     FileItemIterator it = sfu.getItemIterator(request); 
     // TAKE THE FIRST PART FROM REQUEST (HERE COMES THE FILE) 
     if (it.hasNext()) 
     { 
      FileItemStream fis = it.next(); 
      // grab data from fis (content type, name) 
      ...fis.getContentType()... 
      ...fis.getName()... 
      // GET CONTENT LENGTH SEARCH FOR THE LENGTH HEADER 
      ...getContentLength(fis.getHeaders(), request)... 
      // here I use an own method to process data 
      // but FileItemStream has an openStream method 
      FileItem item = processUpload(factory, fis, uploadInfo); 
      (....) 
     } 



private long getContentLength(FileItemHeaders pHeaders, HttpServletRequest request) 
{ 
    try 
    { 
     return Long.parseLong(pHeaders.getHeader("Content-length")); 
    } 
    catch (Exception e) 
    { 
        // if I can't grab the value return an approximate (in my case I don't care) 
     return request.getContentLength(); 
    } 
} 
+0

は、ありがとうストリングを使用して、私はバイトの境界のindexex []は、それが最善のアプローチではないかもしれない何かを見つけることができましたが、それアップロードがうまくいくでしょう –

+0

。それほど堅牢ではありませんが、もしうまくいけば... :)あなたは忙しい時にそのライブラリを試してみてください。使用するのは難しくありません。 – helios

関連する問題