2017-10-28 103 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. 方法的名称以小写字母开头