2016-06-27 15 views
0

目前我正在使用org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput進行文件上傳。我想用一些通用的Java EE設計來替換它。請使用Java EE 7規範建議可能的方式來上傳文件以及少數其他表單數據。如何使用Java EE 7規範實現文件上傳以及一些表單數據?

+0

我傾向於用自己的普通Servlet來處理文件上傳。 servlet 3.0規範(自JEE6以來)已經添加了多方面的處理支持。這在問題的範圍內,還是必須是基於JAX-RS的? – Gimby

+0

我們試圖做的是,我們試圖從請求中獲取文件信息,而不使用任何第三方API。你的代碼/實現是否這樣做?如果是的話,你能分享一下你的代碼/想法嗎? –

+0

我認爲是的。 – Gimby

回答

0

Java EE 7專注於RESTful Web服務。所以要做相應規範的方法,繼續使用JAX-RS 2.0 API:

在這裏,您想要將文件上傳到您的應用程序=>您想將文件發佈到JAX-RS服務。您的方法可以是這樣的:

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

    //Your local disk path where you want to store the file 
    String uploadedFileLocation = "D://uploadedFiles/" + fileDetail.getFileName(); 
    System.out.println(uploadedFileLocation); 
    // save it 
    File objFile=new File(uploadedFileLocation); 
    if(objFile.exists()) 
    { 
     objFile.delete(); 
    } 

    try { 
     OutputStream out = null; 
     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(); 
    } 

    String output = "File uploaded via JAX-RS based RESTFul Webservice to: " + uploadedFileLocation; 
    return Response.status(200).entity(output).build(); 
} 

這是符合Java EE 7的上傳文件JAX-RS服務。

+0

@ FormDataParam在jersey-multipart-api中可用,因此是第三方實現,我希望使用javax.ws api來實現基於JAX-RS的實現。是否有兼容resteasy和球衣的通用規格? –

+0

Jersey框架是JAX-RS參考實現。 Resteasy是JAX-RS的另一個實現。 Resteasy沒有以不同的方式處理MultiPartData:http://docs.jboss.org/resteasy/docs/2.3.4.Final/userguide/html/Multipart.html#MultipartFormData 如果您想在Jersey之間執行「便攜」代碼&Resteasy,我認爲這是不可能的。 –

+0

@JsonBourne這正是我想要的,我想要一個獨立於實現者的代碼,應該與RestEasy和Jersey一起運行的代碼。便攜式代碼,正如您正確指出的那樣。 –

相關問題