2017-10-28 109 views
1
package Restful.Demo.UploadFile; 

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.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

import org.glassfish.jersey.media.multipart.FormDataContentDisposition; 
import org.glassfish.jersey.media.multipart.FormDataParam; 

@Path("UploadFile") 
public class Upload { 

    @GET 
    @Path("/upload1") 
    public String hello() 
    { 
     return "hello"; 
    } 

    @POST 
    @Path("/upload") 
    @Consumes(MediaType.MULTIPART_FORM_DATA)// use to upload file 
    public Response UploadFile(@FormDataParam("file") InputStream inputfile, 
           @FormDataParam("file") FormDataContentDisposition filemetadetail) 
    { 

      int statuscode=200; 
      String fileLocation="e://Restful/"+filemetadetail.getFileName(); 
      writeFile(inputfile, fileLocation); 
      String output="File uploaded to "+fileLocation; 
      return Response.status(statuscode).entity(output).build(); 

    } 
    /* 
    * @param inputFile the file you want to upload 
    * @param fileLocation where file will be uploaded 
    * @return 0 - success 
    * @throws IOException 
    */ 
    private void writeFile(InputStream inputFile,String fileLocation) 
    { 
     OutputStream output=null; 
     try 
     { 
      output=new FileOutputStream(new File(fileLocation)); 
      int read=0; 
      byte[] bytes=new byte[1024]; 
      //read 
      while((read=inputFile.read(bytes))!=-1) 
       output.write(bytes, 0, read); 
      output.flush(); 
      output.close(); 
     } 
     catch(IOException ex) 
     { 
      ex.printStackTrace(); 
     } 

    } 
} 

你好。 我是Restful webserver的彼得和新手。 以上是使用REST風格的API我uploadfile碼 - GlassFish服務器 ,而我試圖發佈戰爭GlassFish服務器無法部署maven寧靜上傳文件

java.lang.Exception的我得到這個錯誤澤西運行:部署是失敗=用名應用 [UploadFile]不部署在 oracle.eclipse.tools.glassfish.GlassFishServerBehaviour.publishDeployedDirectory(GlassFishServerBehaviour.java:603) 在 oracle.eclipse.tools.glassfish.GlassFishServerBehaviour.publishModuleForGlassFishV3(GlassFishServerBehaviour.java:830 ) at oracle.eclipse.tools.glassfish.GlassFishServerBehaviour.publishModule(G lassFishServerBehaviour.java:790) 在 org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publishModule(ServerBehaviourDelegate.java:1091) 在 org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publishModules( ServerBehaviourDelegate.java:1183) 在 org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publish(ServerBehaviourDelegate.java:987) 在 org.eclipse.wst.server.core.model.ServerBehaviourDelegate.publish( ServerBehaviourDelegate.java:774) 在 org.eclipse.wst.server.core.internal.Server.publishImpl(Server.java:3182) 在 org.eclipse.wst.server.core.internal.Server $ PublishJob。運行(Server.jav一:355) 在org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)

誰能幫助我解決這個問題?

+0

您提供的信息太少,無法爲您提供幫助。發佈'web.xml',你運行的是Jersey,Servlet,Glassfish,...的哪個版本。 – ujulu

+0

我沒有使用servlet。只是一個帶有表單的HTML文件。 –

+0

glassfish 4.1.1。 Jersery 2.26 –

回答

0

爲了使您的資源類能夠工作,您需要做一些事情。

  1. 要麼提供Application子類,要麼提供web.xml部署描述符。
  2. 爲了能夠使用多部分模塊,您需要在您的服務器代碼上啓用此功能。這裏是摘自documentation page

9.3.1.2。註冊

在您的客戶端/服務器代碼中使用jersey-media-multipart模塊的功能之前,您需要註冊MultiPartFeature。

這就是說,我已加入下列上的示例web.xml,我可以在Glassfish 4部署應用程序:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
version="3.1"> 

<display-name>Archetype Created Web Application</display-name> 

<servlet> 
    <servlet-name>jersey-serlvet</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <!-- please see modified package name --> 
      <param-value>restful.demo.uploadfile</param-value> 
     </init-param> 
     <init-param> 
      <param-name>jersey.config.server.provider.classnames</param-name> 
      <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>jersey-serlvet</servlet-name> 

     <!-- you can choose your favorite name here!! --> 
     <url-pattern>/rest/*</url-pattern>  
    </servlet-mapping> 

</web-app> 

注:

  • 見上面註釋的零件和嘗試相應地修改你的代碼。

  • 有一些Java中的命名約定,你應該知道的(詳見this文件):

    1. 在Java包名是小寫字母
    2. 方法的名稱以小寫字母開頭