通过Dropwizard框架上传后,Zip文件无法解压缩
问题描述:
我面临的问题是,在服务器上传zip文件后,无法解压。 我已经基于与下一个端点例如Dropwizard框架REST API:通过Dropwizard框架上传后,Zip文件无法解压缩
@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();
}
此外,在应用类我提供适当的类:
....
bootstrap.addBundle(new MultiPartBundle());
....
environment.jersey().register(MultiPartFeature.class);
上传zip文件,它看起来像它上传后,但它不能解压缩,收到下一条消息:
(错误1 - 操作不允许)。
文本和图像文件上传并正确打开。
我跳过了什么吗?我应该添加额外的参数还是设置在某个地方? 谢谢你的答案!
答
这是我的错误。
我发现过滤器可以在有效载荷与资源打交道之前使用。
该过滤器具有下一个代码:
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);
}
与多部分/格式数据所以实体不能被转移到串和否则正确。
在此请求实现之前,所有其他请求负载均为JSON。
我必须更加小心。