我只想使用 jersey rest 服务和 Jquery ajax 作为客户端上传一个文件,这是我的代码 1.HTML
<form action="rest/file/upload" method="post" enctype="multipart/form-data">
<p>
Select a file : <input type="file" name="file" />
</p>
<input type="submit" value="Upload It" />
</form>
2.休息服务
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(@FormDataParam("file") InputStream stream) {
String uploadedFileLocation = "E:\\\\uploaded\\test.jpg";
//Session s = Session.getDefaultInstance(new Properties());
//InputStream is = new ByteArrayInputStream(<< String to parse >>);
//MimeMessage message = new MimeMessage(s, stream);
//Multipart multipart = (Multipart) message.getContent();
// save it
writeToFile(stream, uploadedFileLocation);
String output = "File uploaded to : " + uploadedFileLocation;
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
return Response.status(200).entity(output).build();
}
// save uploaded file to new location
private void writeToFile(InputStream uploadedInputStream,
String uploadedFileLocation) {
try {
byte[] image = IOUtils.toByteArray(uploadedInputStream);
OutputStream out = new FileOutputStream(new File(uploadedFileLocation));
IOUtils.write(image, out);
/*int read = 0;
byte[] bytes = new byte[1024];
while ((read = uploadedInputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}*/
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
它的工作,但流也包括这一行
-----------------------------7dd3b827a0ddc
内容配置:表单数据;名称="file";文件名="水母.jpg" 内容类型:图片/pjpeg
如何从输入流中删除它? 需要专业解答
最佳答案
您看到的这个字符串是服务器添加的一种标识符,用于标记表单中上传数据的开始和结束。如果您将整个数据转储到一个文本文件中,它会在您的文本文件中显示类似这样的内容。
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=-----------------------------7dd3b827a0ddc
Content-Length: 29278
-----------------------------7dd3b827a0ddc
Content-Disposition: form-data; name="txt1"
Some Sample Text
-----------------------------7dd3b827a0ddc
Content-Disposition: form-data; name="file"; filename="Jellyfish.jpg" Content-Type: image/jpeg
(Binary data not shown)
-----------------------------7dd3b827a0ddc--
边界的值即----------------------------7dd3b827a0ddc 是多部分表单数据用来标识整个上传中所有字段的数据开始和结束。
我为您创建了这个示例文件,假设有一个文件上传和一个名为 txt1 的输入文本。
在数据文件中,您可以在标题中看到“边界”,然后边界用于分隔表单数据中的两个字段。注意最后一个边界上的额外“--”。这标志着文件的结尾。
您需要手动解析数据并提取所有字段。 filename="Jellyfish.jpg"标记之间的数据是为图像上传的实际二进制数据。当您从两个标记之间提取数据(不包括“Content-Disposition: form-data; name="file"; filename="Jellyfish.jpg"Content-Type: image/jpeg")并将该数据保存为“水母.jpg";这将是您的形象。
关于java - 通过rest和html作为客户端上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16609541/