调用HttpServletRequest.getInputSteam()方法时缺少字节

时间:2014-10-27 16:59:17

标签: java web-services rest servlets dropwizard

我正在创建Restful Web服务,它接受任何文件并将其保存到文件系统中。我使用Dropwizard来实现服务,Postman / RestClient使用数据来命中请求。我不是在创建multipart(表单数据)请求。

除了保存的文件缺少第一个字符外,每件事情都运行良好。这是我调用服务方法并将其保存到文件系统的代码:

输入请求:

http://localhost:8080/test/request/Sample.txt

Sample.txt的

Test Content

休息控制器

@PUT
@Consumes(value = MediaType.WILDCARD)
@Path("/test/request/{fileName}")
public Response authenticateDevice(@PathParam("fileName") String fileName, @Context HttpServletRequest request) throws IOException {

.......
    InputStream inputStream = request.getInputStream();
    writeFile(inputStream, fileName);
......
}
private void writeFile(InputStream inputStream, String fileName) {
    OutputStream os = null;
    try {

        File file = new File(this.directory);
        file.mkdirs();
        if (file.exists()) {
            os = new FileOutputStream(this.directory + fileName);
            logger.info("File Written Successfully.");
        } else {
            logger.info("Problem Creating directory. File can not be saved!");
        }

        byte[] buffer = new byte[inputStream.available()];
        int n;
        while ((n = inputStream.read(buffer)) != -1) {
            os.write(buffer, 0, n);
        }
    } catch (Exception e) {
        logger.error("Error in writing to File::" + e);
    } finally {
        try {
            os.close();
            inputStream.close();
        } catch (IOException e) {
            logger.error("Error in closing input/output stream::" + e);
        }
    }
}

在输出中,文件已保存,但内容中的第一个字符丢失。 输出:

Sample.txt的:

   est Content

在上面的输出文件中,字符T丢失,所有文件格式都会出现这种情况。

我不知道我在这里错过了什么。

请帮我解决这个问题。

谢谢。

0 个答案:

没有答案