带有REST内部服务器错误的Java上载文件

时间:2014-06-22 19:26:37

标签: java web-services rest servlets jboss

我有一个服务器和一个客户端,我尝试将文件从客户端上传到服务器,我收到以下错误:Response: Internal Server Error

以下是我的代码

    public static void main(String[] args) throws FileNotFoundException{    
        try{
            ClientConfig config = new DefaultClientConfig();

            config.getClasses().add(MultiPartWriter.class);
            Client client = Client.create(config);



            WebResource resource = client.resource("http://localhost:8080/de.ServerReceiver/rest/upload");

            File f = new File("C:/1.txt");          
            FileInputStream fs = new FileInputStream(f);
            byte[] con = new byte[(int)f.length()];

            fs.read(con);
            FormDataMultiPart form1 = new FormDataMultiPart();

            FormDataBodyPart fdp = new FormDataBodyPart("content", MediaType.MULTIPART_FORM_DATA);
            form1.bodyPart(fdp);


            String response = resource.type(MediaType.MULTIPART_FORM_DATA).post(String.class, form1);
        } 
        catch (Exception e) { e.printStackTrace(); 
            }
        }
}

服务器:

@Path("/upload")

public class Server {

    private static final String SERVER_UPLOAD_LOCATION_FOLDER = "C://";

    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)

    public Response uploadFile(
            @FormDataParam("file") InputStream fileInputStream,
            @FormDataParam("file") FormDataContentDisposition contentDispositionHeader) {



        String filePath = "C://" + contentDispositionHeader.getFileName();

        // save the file to the server
        saveFile(fileInputStream, filePath);

        String output = "File saved to server location : " + filePath;

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

    }

    // save uploaded file to a defined location on the server

    private void saveFile(InputStream uploadedInputStream, String serverLocation) {

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

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

            e.printStackTrace();
        }
    }
}

这是web.xml,你可以看到我已经将url-pattern设置为/ rest / *

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>de.ServerReceiver</display-name>

  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>de.ServerReceiver</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

客户端尝试使用以下uri连接到服务器:'http://localhost:8080/de.ServerReceiver/rest/upload'

我收到以下错误:

sdadacom.sun.jersey.api.client.UniformInterfaceException: POST http://localhost:8080/de.ServerReceiver/rest/upload returned a response status of 500 Internal Server Error
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:688)
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570)
    at de.ClientSide.ClientSide.main(ClientSide.java:82)

请帮帮我。

谢谢

1 个答案:

答案 0 :(得分:0)

如果你这样做:

outpuStream = new FileOutputStream(new File("C://"));

这意味着您希望将收到的文件保存为“C://”,这没有意义,因为“C://”是目录,而不是文件。