【问题标题】:Uploading file through REST API with JERSEY使用 JERSEY 通过 REST API 上传文件
【发布时间】:2017-11-23 10:25:39
【问题描述】:

您好,已经看到很多关于此的帖子,但我找不到我的问题。

我不断收到错误 400

这是我的代码

POST
@Path("/upload")
@Consumes({MediaType.MULTIPART_FORM_DATA})
public Response uploadFile(  @FormDataParam("file") InputStream fileInputStream,
                                @FormDataParam("file") FormDataContentDisposition fileMetaData) throws Exception
{
    System.out.println(fileMetaData.getFileName());

    return Response.ok("File caught successfully !!").build();
}

这是我的泽西依赖项

       <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-server</artifactId>
            <version>2.25</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-multipart</artifactId>
            <version>2.25</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <version>2.18</version>
        </dependency>

我已将此添加到 AppConfiguration

@Override
public Set<Class<?>> getClasses() {
    Set<Class<?>> resources = new java.util.HashSet<>();
    addRestResourceClasses(resources);
    resources.add(MultiPartFeature.class);
    return resources;
}

平心而论,这可能是我的实际 HTTP 请求,所以这是我的 POSTman

【问题讨论】:

    标签: java rest web jersey glassfish


    【解决方案1】:

    //你能用这个代码上传多个文件吗

        @Path("/files")
            @POST
            @Consumes(MediaType.MULTIPART_FORM_DATA)
            public Response uploadFiles2(@DefaultValue("") @FormDataParam("tags") String tags,
                    @FormDataParam("files") List<FormDataBodyPart> bodyParts,
                    @FormDataParam("files") FormDataContentDisposition fileDispositions,
                    @FormDataParam("file2") InputStream file2,
                    @FormDataParam("file2") FormDataContentDisposition fileDisposition2) {
    
                StringBuffer fileDetails = new StringBuffer("");
    
                /* Save multiple files */
    
                for (int i = 0; i < bodyParts.size(); i++) {
                    /*
                     * Casting FormDataBodyPart to BodyPartEntity, which can give us
                     * InputStream for uploaded file
                     */
                    BodyPartEntity bodyPartEntity = (BodyPartEntity) bodyParts.get(i).getEntity();
                    String fileName = bodyParts.get(i).getContentDisposition().getFileName();
    
                    saveFile(bodyPartEntity.getInputStream(), fileName);
    
                    fileDetails.append(" File saved at /Volumes/Drive2/temp/file/" + fileName);
                }
    
                /* Save File 2 */
    
                String file2Name = fileDisposition2.getFileName();
    
                saveFile(file2, file2Name);
                fileDetails.append(" File saved at /Volumes/Drive2/temp/file/" + file2Name);
                fileDetails.append(" Tag Details : " + tags);
    
                System.out.println(fileDetails);
    

    HTML 代码如下

    <form action="/upload/files" enctype="multipart/form-data" method="post">
            <label>Select multiple files</label><input type= "file" name="files" multiple /> <br/><br/>
            <label>Select File</label><input type= "file" name="file2" /> <br/><br/>
            <label>Tags</label> <input name="tags" maxlength="10"/> <br/><br/>
            <input type="submit" title="Save"/>
        </form>
    

    【讨论】:

      【解决方案2】:

      一种快速的方法。从您的方法中删除 @Consumes 并从邮递员中删除内容类型。它对我有用。

      不用担心 Jersey 会将其视为multipart form-data

      【讨论】:

        猜你喜欢
        • 2023-03-10
        • 2016-12-14
        • 2014-12-30
        • 2021-06-07
        • 1970-01-01
        • 2012-05-30
        • 1970-01-01
        • 1970-01-01
        • 2017-05-19
        相关资源
        最近更新 更多