文件通过rest和html作为客户端上传

时间:2013-05-17 12:51:59

标签: java html rest multipartform-data fileinputstream

我只想使用泽西休息服务和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.Rest Service

@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

内容 - 处置:表单数据; NAME = “文件”;文件名= “Jellyfish.jpg” 内容类型:image / pjpeg

如何从输入流中删除它? 需要专业知识答案

1 个答案:

答案 0 :(得分:1)

您看到的这个字符串是服务器添加的一种标识符,用于标记表单中上传的数据的开头和结尾。如果将整个数据转储到文本文件中,它将在文本文件中显示类似的内容。

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”)并将该数据保存为“ Jellyfish.jpg“;这将是你的形象。