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

Dropwizard文件上传

孔琪
2023-03-14

我必须从我的网站上传一个文件,但cnt似乎可以使用drop wizard。

这是我网站上的表格。

   <form enctype="multipart/form-data" method="POST" action="UploadFile">
     <input type="file" id="fileUpload" name="file"/>
     <input type="hidden" id="fileName" name="fileName"/>
     <input type="submit" value="Upload"/>
   </form>

如何在后端接收文件?

解决办法是

    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(
        @FormDataParam("file") final InputStream fileInputStream,
        @FormDataParam("file") final FormDataContentDisposition contentDispositionHeader) {


    String filePath = uploadLocation + newFileName;
    saveFile(fileInputStream, filePath);
    String output = "File can be downloaded from the following location : " + filePath;

    return Response.status(200).entity(output).build();

}

private void saveFile(InputStream uploadedInputStream,
        String serverLocation) {
    try {
            OutputStream outputStream = new FileOutputStream(new      File(serverLocation));
            int read = 0;
            byte[] bytes = new byte[1024];

            outputStream = new FileOutputStream(new File(serverLocation));
            while ((read = uploadedInputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, read);
            }
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }   

共有3个答案

东门焕
2023-03-14

确保将dropwizard表单依赖项添加到pom.xml

<dependency>
    <groupId>io.dropwizard</groupId>
    <artifactId>dropwizard-forms</artifactId>
    <version>${dropwizard.version}</version>
    <type>pom</type>
</dependency>

您的资源似乎不错,无论如何,我已经上传了一个示例项目,用于使用Dropwizard上传文件 - https://github.com/juanpabloprado/dw-multipart

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
        @FormDataParam("file") InputStream uploadedInputStream,
        @FormDataParam("file") FormDataContentDisposition fileDetail) throws MessagingException, IOException {

    String uploadedFileLocation = "C:/Users/Juan/Pictures/uploads/" + fileDetail.getFileName();

    // save it
    writeToFile(uploadedInputStream, uploadedFileLocation);
    String output = "File uploaded to : " + uploadedFileLocation;
    return Response.ok(output).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();
}
林劲
2023-03-14

使用Dropwizard 0.9.2,您必须添加依赖项:

<dependency>
    <groupId>io.dropwizard</groupId>
    <artifactId>dropwizard-forms</artifactId>
    <version>${dropwizard.version}</version>
    <type>pom</type>
</dependency>

以及注册多部分功能

    environment.jersey().register(MultiPartFeature.class);
羊毅庵
2023-03-14

您可以使用 nio 在较少的行数中保存到服务器

java.nio.file.Path outputPath = FileSystems.getDefault().getPath(<upload-folder-on-server>, fileName);
Files.copy(fileInputStream, outputPath);

此外,如果您使用的是0.7.0-rc2,那么您的pom.xml中将需要这种依赖性

<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-multipart</artifactId>
<version>1.18</version>
</dependency>
 类似资料:
  • 我正在使用dropwizard,我想一次上传多个文件。 我如何改变我的代码来上传多个文件? 我正在使用<code>org.glassfish.jersey。“媒体”,“泽西媒体多部分”,“2.17”用于文件上传。 这是我上传单个文件的代码:

  • 有人能告诉我如何在dropwizard 1.2.6中实现可恢复的文件上传吗?因此,如果用户试图上传一个大文件(4-5 GB),如果出现网络故障或浏览器错误关闭,那么用户将能够从中断的地方恢复该过程。

  • 我是Dropwizard的新手。我想在我的项目中实现AWS S3文件上传服务。 我没有收到任何通过拖放在AWS S3上上传文件的教程。 我在pom.xml中添加了以下依赖项 我已经注册了多部分功能。将应用程序类的run()方法中的- 然后在资源类中定义方法为- 但在运行时,它显示以下日志:- 如何获取上传文件的url?如何通过编码检查文件上传?我遗漏了什么吗?有人知道这件事吗。如果dropwiza

  • 我在我的Java API中使用了swagger-inflector V.1.0.17。以下是我构建API的基础:https://github.com/swagger-api/swagger-samples/tree/master/java/fintector-dropwizard-guice 我的文件上传API定义如下: 和控制器中的方法:

  • 给定以下web.xml: 如何告诉DropWizard将“模块”servlet上下文参数设置为“com.foo.MainModule”? 始终返回空列表。我们应该扩展这个类吗?

  • 配置文件(.yml)用于使用Dropwizard(0.9.2-最新版本)开发的rest api。api所需的大部分凭证(如数据库密码、密钥等)都存储在配置文件中。 我们已经根据在dropwizard配置参考中找到的参考中提到的项目实现了大部分内容。 问题很清楚。它有多安全(将这些信息以纯文本形式存储在配置文件中)。)?如果不是,正确的做法是什么?