当前位置: 首页 > 知识库问答 >
问题:

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

谭健柏
2023-03-14

我有一个方法在资源类,上传文件。它调用一个方法,该方法将文件作为参数,然后将文件分成几个部分,然后将这些部分写入磁盘。

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

我已经看到了很多使用Jersey上传文件的例子,这些文件以@FormDataParam的形式接收InputStream和FormDataContentDisposition,但我不确定这是否是必需的。

@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个答案

麹飞航
2023-03-14

如果您使用Socket发送请求,如HttpUrlConnection,您可以在OutPutStream中写入文件字节,并在服务器端使用HttpServletRequest和进程request.getInputStream()中写入字节...

或者,如果您可以使用multipartformdata发送请求,并使用RequestPart()MultiPartFile file捕获文件以上载文件。

我希望这会有帮助

 类似资料:
  • 问题内容: 我在Jenkins的命令行中使用字符串参数触发构建: 我现在想从命令行触发使用文件作为文件参数的构建。 例如,如果我的项目构建了main.c,那么我希望能够触发构建并从命令行上传main.c。 这可能吗? 问题答案: 在“ Jenkins远程访问 API”页面中对此进行了描述: 请注意,您需要使用URL / build代替/ buildWithParameters

  • 问题内容: 我试图编写一个程序来通过args读取文本文件,但是当我运行它时,它总是说找不到该文件,即使我将其放置在与我正在运行的main.java相同的文件夹中。有谁知道我的问题的解决方案或更好的阅读文本文件的方法? 问题答案: 请勿在中使用相对路径。 它将变成相对于当前工作目录的,这取决于您如何运行应用程序,而该方法又是无法从应用程序内部进行控制的。这只会导致可移植性麻烦。如果从Eclipse内

  • 问题内容: Jenkins构建中的每个文件参数“帮助文本”, 接受来自浏览器的文件提交作为构建参数。上载的文件将放置在工作空间中的指定位置,然后您的构建可以访问和使用该文件。这在许多情况下很有用,例如: 让人们对其构建的工件进行测试。 通过允许用户放置文件来自动执行上载/发布/部署过程。 通过上传数据集执行数据处理。 提交的文件的名称在环境变量中可用,该环境变量的名称与文件位置相同。例如,如果将文

  • 问题内容: 我有一个txt文件,其中包含一个字符串,我希望能够在我的一个脚本中使用此字符串,所以我想知道是否有一种方法可以将文件内容设置为构建属性之一或可以在脚本中使用的参数,应该与使用构建环境属性之一相同。例如:$ {JOB_NAME},它保存着作业名称,因此,我想以相同的方式访问其中保存着某些值的文件的内容。可能吗? 问题答案: 您可以通过作业的 File 参数将文件从计算机上载到工作区。 您

  • 使用Struts2.3.15.1 在struts2中实现文件上传。这是我已经做了很多次的事情,但是,我试图包括一些健全的检查(即最大文件大小)。我有fileUpload拦截器作为堆栈中的最后一个拦截器(即struts.xml)。我的堆栈包括一些内部拦截器以及validationWorkflowStack。我在struts中设置了以下属性。属性文件: 除了文件上传,我还在表单中传递一些其他参数。表格

  • 问题内容: 我用PHP创建了一个上传页面,但是我不知道为什么该页面不会上传大于500MB的文档,这是我第一次尝试上传较大的内容,因此我更改了PHP.INI中的所有配置(post_max_size = 700M ,upload_max_filesize = 600M和max_execution_time = 300)。上传代码如下 我需要帮助,我想知道是否有某些事情做对了。 问题答案: 您认为增加上