首页 文章

Java Jersey如何使用文件作为参数上传文件

提问于
浏览
0

我在资源类中有一个方法uploadFile . 它调用一个方法,该方法将文件作为参数,然后在将所述部分写入磁盘之前将文件拆分为多个部分 .

我想知道如何为它编写客户端测试,假设可以在不使用@FormDataParam InputStream的情况下上传文件 . 因为在这种情况下我认为我不需要它 .

我已经看到很多用Jersey上传文件的例子,它将InputStream和FormDataContentDisposition作为@FormDataParam,但我不确定这是否是强制性的 .

@POST
@Path("/uploadfile/{file}")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(@PathParam("file") File file, @FormDataParam("file") FormDataContentDisposition fileMetaData) throws IOException {
    FileSplit.splitFile(file); //Write file to disk
    String output = "File successfully uploaded";  
    return Response.status(200).entity(output).build();
}

//Method to write file to disk
public static void splitFile(File f) throws IOException {
    int partCounter = 1;

    int sizeOfFiles = (int) (f.length() / 3);
    byte[] buffer = new byte[sizeOfFiles];

    String fileName = f.getName();

    try (FileInputStream fis = new FileInputStream(f);
            BufferedInputStream bis = new BufferedInputStream(fis)) {

        int bytesAmount = 0;
        while ((bytesAmount = fis.read(buffer)) != -1) {
            String filePartName = String.format("%s.%03d", fileName, partCounter++);
            File newFile = new File("D:\\", filePartName);
            try (FileOutputStream out = new FileOutputStream(newFile)) {
                out.write(buffer, 0, bytesAmount);
            }
        }
    }
}

1 回答

  • 0

    如果您使用Socket发送请求,如 HttpUrlConnection ,您可以在 outPutStream 中写入文件字节,在服务器端使用 HttpServletRequest 并处理 request.getInputStream() 以在您的存储中写入字节 .

    或者,如果您可以使用 multipart-formdata 发送请求并使用 RequestPart() MultiPartFile file 捕获文件到上传文件 .

    我希望这会有所帮助

相关问题