2012-04-17 2 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

이 작업을 수행하기 위해 httpmime를 아파치 HttpClient를 사용하고 있습니다 : 샘플 서버 코드와 함께 작동

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 상태 400 - 잘못된 요청"이 표시됩니다. – user732362

+0

엔드 포인트에 대해 무엇을 사용하고 있습니까? – condit

+0

엔드 포인트 값은 내 게시물 URL입니다. -http : // localhost : 9090/RESTfulExample/rest/file/upload – user732362