通过Dropwizard框架上传后,Zip文件无法解压缩

时间:2017-10-19 09:23:35

标签: java file-upload jersey zip dropwizard

我遇到的问题是在服务器上传zip文件后无法解压缩。 我有基于Dropwizard框架的REST API以及下一个端点示例:

@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
@Path("/zip")
public class ImportResource {

    @POST
    public Response fileService(@FormDataParam("fileData") InputStream fileDataInputStream,
        @FormDataParam("fileData") FormDataContentDisposition fileDataDetail) {

        File newFile = new File("/Users/alexx/Documents/"+ fileDataDetail.getFileName());

        try {
            final OutputStream out = new FileOutputStream(newFile);
            ByteStreams.copy(fileDataInputStream, out);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return Response.ok().build();
    }
    // save uploaded file to new location
    private void writeToFile(InputStream uploadedInputStream, String uploadedFileLocation) throws IOException {
        int read;
        final int BUFFER_LENGTH = 1024;
        final byte[] buffer = new byte[BUFFER_LENGTH];
        OutputStream out = new FileOutputStream(new File(uploadedFileLocation));
        while ((read = uploadedInputStream.read(buffer)) != -1) {
            out.write(buffer, 0, read);
        }
        out.flush();
        out.close();
    }

同样在Application类中,我提供了适当的类:

....
bootstrap.addBundle(new MultiPartBundle());
....
environment.jersey().register(MultiPartFeature.class);

上传zip文件后,它看起来像上传,但无法解压缩,收到下一条消息:

(错误1 - 不允许操作)。

文本和图片文件上传并正确打开。

我跳过了什么吗?我应该添加额外的参数还是设置在哪里? 谢谢你的回答!

1 个答案:

答案 0 :(得分:0)

这是我的错误。

在找到资源之前,我找到了有效负载的过滤器。

过滤器有下一个代码:

    payload = IOUtils.toString(requestContext.getEntityStream(), StandardCharsets.UTF_8);
            if (payload != null) {
                RequestPayloadHolder.getRequestPayload().setPayload(payload);
                InputStream in = IOUtils.toInputStream(payload, StandardCharsets.UTF_8);
                requestContext.setEntityStream(in);
            }

因此,具有multipart / form-data的实体无法传输到String,也无法正确传输。

在此请求实现之前,所有其他请求有效负载都是JSON。

我必须更加小心。