2012-04-17 17 views
2

JAX RSを使用してファイルアップロードの例を設定しようとしています。クライアントがJSPページで問題がないときにプロジェクトをセットアップすることができました。しかし、私はサービスに投稿要求を送信するJavaクラスとしてクライアントを持っていると思います。私のサーバーサイドコードは以下の通りです。JAX RSファイルアップロード

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

import com.sun.jersey.core.header.FormDataContentDisposition; 
import com.sun.jersey.multipart.FormDataParam; 

@Path("/file") 
public class UploadFileService { 

@POST 
@Path("/upload") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadFile(
     @FormDataParam("file") InputStream uploadedInputStream, 
     @FormDataParam("file") FormDataContentDisposition fileDetail) { 

    String uploadedFileLocation = "d://uploaded/" 
      + fileDetail.getFileName(); 


    writeToFile(uploadedInputStream, uploadedFileLocation); 

    String output = "File uploaded to : " + uploadedFileLocation; 

    return Response.status(200).entity(output).build(); 

} 


private void writeToFile(InputStream uploadedInputStream, 
     String uploadedFileLocation) { 

    try { 
     OutputStream out = new FileOutputStream(new File(
       uploadedFileLocation)); 
     int read = 0; 
     byte[] bytes = new byte[1024]; 

     out = new FileOutputStream(new File(uploadedFileLocation)); 
     while ((read = uploadedInputStream.read(bytes)) != -1) { 
      out.write(bytes, 0, read); 
     } 
     out.flush(); 
     out.close(); 
    } catch (IOException e) { 

     e.printStackTrace(); 
    } 

} 

} 

クライアントは、JSPページとして次のようになります。

<html> 
<body> 
<h1>File Upload with Jersey</h1> 

<form action="http://localhost:9090/RESTfulExample/rest/file/upload" method="post" enctype="multipart/form-data"> 

    <p> 
    Select a file : <input type="file" name="file" size="45" /> 
    </p> 

    <input type="submit" value="Upload It" /> 
</form> 

</body> 
</html> 

誰かがクライアントとしてクラスファイルを手伝ってもらえますか?

答えて

1

あなたはこれを達成するために、ApacheのHTTPClientのとhttpmimeを使用することができます。

import java.io.File; 
import java.io.IOException; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.mime.MultipartEntity; 
import org.apache.http.entity.mime.content.FileBody; 
import org.apache.http.impl.client.DefaultHttpClient; 

public class Uploader { 

    public void uploadFile(String endpoint, File file) throws ClientProtocolException, IOException { 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost(endpoint); 
    FileBody uploadFilePart = new FileBody(file); 
    MultipartEntity reqEntity = new MultipartEntity(); 
    reqEntity.addPart("file", uploadFilePart); 
    httpPost.setEntity(reqEntity); 
    HttpResponse response = httpclient.execute(httpPost); 
    //Check response for success 
    } 

} 

あなたのサンプルサーバコードで働きます。同様にthis questionを参照してください。

+0

こんにちは、私はhttpclientを使ってみましたが、 "HTTP Status 400 - Bad Request"を取得しています。 – user732362

+0

エンドポイントには何を使用していますか? – condit

+0

エンドポイントの値は私のポストURLです.http:// localhost:9090/RESTfulExample/rest/file/upload – user732362