当前位置: 首页 > 面试题库 >

带有FormDataContentDisposition的org.glassfish.jersey上传文件

宗政欣可
2023-03-14
问题内容

http://www.mkyong.com/webservices/jax-rs/file-upload-example-in-
jersey/
我正在遵循本指南并遇到问题。我有一些问题。

  1. 是否所有依赖项都必须对应?我的项目有一些org.glassfish.jersey依赖项,本指南建议使用org.sun.jersey。我是否也必须使用相同的版本进行更改?
        <dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>2.16</version>
    </dependency>
    <dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.16</version>
  1. 我有这个错误
        org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization. [[FATAL] No injection source found for a parameter of type public ***.***.****.common.dto.response.AbstractResponse ***.***.****.m2m.instancetypeupload.webservice.InstanceTypeUploadWebService.upload(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition) at index 0.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class ***.***.****.m2m.instancetypeupload.webservice.InstanceTypeUploadWebService, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@90516e]}, definitionMethod=public ***.***.***.common.dto.response.AbstractResponse ***.***.*****.m2m.instancetypeupload.webservice.InstanceTypeUploadWebService.upload(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition), parameters=[Parameter [type=class java.io.InputStream, source=file1, defaultValue=null], Parameter [type=class org.glassfish.jersey.media.multipart.FormDataContentDisposition, source=file1, defaultValue=null]], responseType=class ***.***.***.common.dto.response.AbstractResponse}, nameBindings=[]}']

这是我的网络服务

        @POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces(MediaType.APPLICATION_JSON)
    public AbstractResponse upload(@FormDataParam("file1") InputStream file1,
                               @FormDataParam("file1") FormDataContentDisposition filename1
                              ) {

这是我的电话:

    $.ajax({
      url: 'http://localhost:8080/******/webapi/m2m/upload',
      data: fd,
      processData: false,
      contentType: 'multipart/form-data',
      type: 'POST',
      success: function(data){
        alert(JSON.stringify(data));
        return;
      }
    });

如果Web服务只有1个参数(FormData InputStream),则可以访问该Web服务。如何解决?

  1. 我还想为Web服务添加另一个String参数。我该怎么办?

谢谢peeskillet的答案。有点额外。

SEVERE: The web application [/linterm2m] created a ThreadLocal with key of type [org.jvnet.hk2.internal.PerLocatorUtilities$1] (value [org.jvnet.hk2.internal.PerLocatorUtilities$1@df94b1]) and a value of type [java.util.WeakHashMap] (value [{}]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.

问题答案:

如果您的项目正在使用org.glassfish,则您正在使用Jersey 2,com.sun即Jersey
1,则永远不要混用两者。话虽如此,您面临的错误很可能是由于您没有注册MultipartFeature。在启动时对资源模型(资源方法)进行“正确性”验证时,如果未注册功能,则该功能特有的注释是未知的,就像没有注释一样。而且,您不能有多个不带注释的方法参数。

如果您使用ResourceConfig,则可以简单地使用

public class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        register(MultiPartFeature.class);
    }
}

如果您使用的是web.xml,则可<init-param>以为您注册的Jersey servlet 设置一个

    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
    </init-param>

“我还想为Web服务添加另一个String参数。我该怎么办?”

您需要将其作为多部分请求的一部分,而客户端也需要确保将其作为多部分的一部分发送。在服务器端,只需添加另一个@FormDataParam("anotherString")StringanotherString作为方法参数即可。至于客户端,我不知道jQuery可以帮上忙。尚未测试,但是您可以尝试执行此操作,该操作显示数据已追加到FormParam。这是Angular的功能,我自己在其中构建了请求主体。可能有点多,因为您可能不需要显式设置内容类型。



 类似资料:
  • 问题内容: 我需要使用 restlet* 上传 带有其他数据 的文件 。因此,我创建了一个示例html页面,如下所示。 * 我需要从 输入字段中 读取值以及文件数据。现在可以读取文件内容。如何在同一api调用中从该输入框中获取值。 } 问题答案: 首先,您需要了解请求的内容。如果您查看发送的请求(萤火虫或其他),您将看到以下内容: 如您所见,请求中包含多个部分。这意味着您可以遍历服务器资源中的这些

  • 我正试图使用阿拉莫菲尔上传文件。使用文件()时,上传效果很好,但是,我似乎不知道如何使用选项? 这是我的测试: 我的状态代码是415? 此外,如何在上传中发送其他参数? 谢啦 编辑 我没有设置正确的内容类型: 仍然不知道如何发送附加参数随上传。

  • 本文向大家介绍带有多个进度条的HTML5文件上传,包括了带有多个进度条的HTML5文件上传的使用技巧和注意事项,需要的朋友参考一下 为了使其正常工作,您需要解决xhr progress事件,该事件在所有列表项都已创建后就会触发。 该XHR 应该知道你想做什么-

  • 我想使用cURL不仅以HTTP POST发送数据参数,而且还上传具有特定表单名称的文件。我该怎么做呢?

  • 问题内容: 我一直在寻找解决方案,但是已经找不到了。 基本上,我想从Android设备上将文件上传到http网站。但是,我不知道如何执行此操作。我在设备上使用Java,并且我想在服务器端使用PHP。我只想上传文件,而不想在服务器上做任何花哨的事情。 谁能提供代码和/或指向我所需的链接?我对此几乎没有经验,也很茫然。 谢谢,NS PS。我没有PHP编码经验。 问题答案: 是的,所以我找到了Java方

  • 我必须使用文件发送数组数据。仅使用数据即可正常工作: 但是,既然我不能将“form_params”与“multipart”一起使用,那么如何发送带有数组和布尔数据的文件呢? 我试过了: 但是我收到一个错误,因为“contents”不接受布尔值或数组值。 我需要一些帮助。 谢谢 更新:我无法解决这个问题,最后我不得不使用一个不太好的解决方案,包括作为查询字符串的表单文件参数并仅使用Multipart