Java Jersey 如何以文件为参数上传文件

Posted

技术标签:

【中文标题】Java Jersey 如何以文件为参数上传文件【英文标题】:Java Jersey How to Upload File with the File as Parameter 【发布时间】:2019-01-05 19:33:54 【问题描述】:

我在资源类中有一个方法,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】:

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

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

我希望这会有所帮助

【讨论】:

以上是关于Java Jersey 如何以文件为参数上传文件的主要内容,如果未能解决你的问题,请参考以下文章

Java 上传和下载文件(附加密和解密)

Java 上传和下载文件(附加密和解密)

Java 上传和下载文件(附加密和解密)

如何在Java Jersey REST服务中强制使用queryparams?

在 Jackson/Jersey JAVA 上发布带有多个参数 JSON 和 String 的请求

Jersey 服务文件上传导致 OutOfMemoryError