java - 如何获取上传的文件名?

标签 java maven jersey jetty jax-rs

我正在尝试使用 Jersey 分段上传。一切都运转良好。但我无法获取上传的文件名。我认为这是库问题。

这是我的 pom.xml 的依赖项

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.bundles</groupId>
        <artifactId>jaxrs-ri</artifactId>
        <version>2.21</version>
    </dependency>
    <dependency>
        <groupId>commons-net</groupId>
        <artifactId>commons-net</artifactId>
        <version>3.3</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.17</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>1.18.1</version>
    </dependency>
</dependencies>

我的UploadFileService

@Path("/file")
public class UploadFileService {

    @POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(
            @FormDataParam("file") InputStream uploadedInputStream,
            @FormDataParam("file1") FormDataContentDisposition fileDetail) {
        ... 
    }
}

如果我将 @FormDataParam("file1") 更改为 @FormDataParam("file") POST 请求将返回 Bad Request。但没有它它也能很好地工作。

如何获取文件名?为什么 @FormDataParam("file") 使服务返回错误请求?

更新

我的上传html

<html>
<body>
<h1>File Upload with Jersey</h1>

<form action="http://localhost:8080/Project/api/file/upload" method="post" enctype="multipart/form-data">

  <p>
    Select a file : <input type="file" name="file" size="45" />
  </p>

  <input type="submit" value="Upload It" />
</form>

</body>
</html>

申请

@ApplicationPath("/api")
public class Application extends javax.ws.rs.core.Application {
    public Set<Class<?>> getClasses() {
        final Set<Class<?>> resources = new HashSet<>();
        resources.add(UploadFileService.class);
        resources.add(MultiPartFeature.class);
        return resources;
    }
}

最佳答案

您可以使用String fileName = fileDetail.getFileName();获取上传的文件名

Jersey 1 使用 com.sun 包,Jersey 2 使用 org.glassfish 包。切勿混合它们。替换您的

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-core</artifactId> 
    <version>1.18.1</version> 
</dependency> 

有了这个:

<dependency> 
    <groupId>org.glassfish.jersey.core</groupId> 
    <artifactId>jersey-server</artifactId> 
    <version>2.22.1</version> 
</dependency> 

关于java - 如何获取上传的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33999393/

相关文章:

java - 减小 jar 文件大小

java - 使用 MapReduce 作业的 HBase 批量删除

Maven 在 pom 中访问系统属性

java - 管理 Web 应用程序之间的依赖关系

java - 为什么我们不能在Java中编写ChildimplementsAnyInterfaceextendsBase类?

maven - 插件验证在Maven中如何工作,为什么它用无效版本构建我的项目?

gradle - 使用Gradle运行测试时如何排除jersey 1.x依赖关系

java - 无法使用 JSON 实体测试 Jax-rs

Java Jersey REST 项目未给出响应

java - 为什么使用 resultset!=null 它会检查 null