4

次のようにファイルをサーブレットにアップロードすると:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.tumblr.com/api/write");

try 
{
    MultipartEntity entity = new MultipartEntity();
    entity.addPart("type", new StringBody("photo"));
    entity.addPart("data", new FileBody(image));
    httppost.setEntity(entity);
    HttpResponse response = httpclient.execute(httppost);
} 
catch (ClientProtocolException e) {} 
catch (IOException e) {}

サーブレットでコンテンツを取得するにはどうすればよいですか?

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws  IOException 
{
     request.???
}
  • Google App Server をサーブレット API として使用しています
4

1 に答える 1

4

サーブレット コンテナーまたはサーバーまたはエンジンのバージョンが3.0 未満(2.5 以前など) の場合は、サードパーティのライブラリApache Commons FileUploadを利用することをお勧めします。ファイルはアップロードされたファイルの使用を暗示していましたが、ここで説明されているように、POST メソッドからアップロードされた投稿データも効果的に処理します。

バージョン 3.0 からの Servlet API は、POST-Request 内で送信された、投稿されたデータを処理するためにいくつかの呼び出しを提供します。唯一の要件は、エンティティ コンテンツの MIME タイプ エンコーディングが " multipart/form-data " であることです。

次に、次のいずれかを使用して、コンテンツの各「部分」を取得できます。

  1. getPart(String partName) : 「partName」はマルチコンテンツ エンティティの一部の名前です。

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws  IOException 
    {
        String partName = "type"; // or "data"
        Part part = request.getPart(partName);
    
        // read your StringBody type
        BufferedReader reader = new BufferedReader( new InputStreamReader(part.getInputStream()));
        String line ="";
    
        while((line=reader.readLine())!=null)
        {
            // do Something with a line
            System.out.println(line);
    
        }
    
        // or with a binary Data
        partName="data";
        part = request.getPart(partName);
    
        // read your FileBody data
        InputStream is = part.getInputStream();
        // do Something with you byte data
    
        is.read();
        // is.read(b);
        // ..
    
    }
    
  2. getParts() :

getPart(partName) と同じ結果が得られますが、ここで指定されたデータは、送信されたデータのすべての部分のコレクションです。このコレクションの Part の各部分を取得するには、コレクションに対してスレッドセーフな繰り返しを使用します。

Iterator<Part> iterator = request.getParts().iterator();
       Part parts = null;
       while (iterator.hasNext()) {
       parts = (Part) iterator.next();
          //rest of the code block removed
       }
    }

getPart()/getParts() は Servlet 3.0 バージョンからのみ機能するため、サポートされているサーブレット コンテナーを使用するか、現在のサーブレット コンテナーをアップグレードする必要があります。3.0 をサポートする一部のサーバーまたはサーブレット コンテナー:

  1. トムキャット 7.0 :
  2. JBoss ウェブ
  3. 樹脂
于 2012-05-17T10:53:36.530 に答える