我有一个服务器和一个客户端,我尝试将文件从客户端上传到服务器,我收到以下错误: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)
请帮帮我。
谢谢
答案 0 :(得分:0)
如果你这样做:
outpuStream = new FileOutputStream(new File("C://"));
这意味着您希望将收到的文件保存为“C://”,这没有意义,因为“C://”是目录,而不是文件。