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

使用Axios将文件从react上传到API CXF 2.5 java

茹建茗
2023-03-14

对于要添加到formData中的文本值,我使用类Blob,这样文件和文本值都是相同的。

在webservice java中,我有一个multivaluedmap 作为参数,并且只有文本值,我有我的数据。如果我在axios post请求中添加该文件,则会出现错误500并且服务器没有记录任何事件,我认为它会在与multivaluedmap 的映射中崩溃。

然后我尝试使用multivaluedmap ,但问题是一样的。

如果我像预期的那样只使用String作为param,那么在axios post请求的数据中只有第一个条目,它只是值而不是键。

我想知道我是否在react端做了什么不好的事情,但我不熟悉CXF,所以可能是我在java端的做法不好。

    @POST
    @Consumes("multipart/form-data")
    public void createInfoCollection(MultivaluedMap<Object, Object> formData) {
        
        try {
            System.out.println("json incoming");
            System.out.println(formData);   
        } catch(Exception e) {
            System.out.println("Exception = " + e);
        }
    }

在react上,代码很简单,如下所示:

        const formData = new FormData();

        if (this.state.selectedFile) {
            // Update the formData object 
            formData.append(
                "selectedFile",
                this.state.selectedFile,
                this.state.selectedFile.name
            );
        }

        Object.keys(this.state).map(key => {
            if (key != 'selectedFile') {
                let value = this.state[key];
                const json = JSON.stringify(value);
                const blob = new Blob([json], {
                    type: 'application/json'
                });
                formData.append(key, blob, key);
                // formData.append(key, this.state[key]);
            }
        });

        const config = {
            headers: {
                'content-type': 'multipart/form-data'
            }
        }
        axios.post("My/Url/That/Works/Well/With/GetRequests", formData, config)
            .catch(error => {
                console.log(error);
            });

编辑:我发现了java端的multipartbody,但我还在学习如何使用它

共有1个答案

宁弘亮
2023-03-14

好的,我找到了一个使用multipartbody formdat的解决方案

在此对象中,有标头content-disposition,该标头具有属性名称name和属性filename(如果content-typeapplication/octet-stream)。

如果文件旁边有其他数据,则该文件没有任何content-type,但在解析content-disposition之后,获取名称的方法与属性name相同。

然后在multipartbody上有附件,通过attachment.GetDataHandler().GetInputStream()我有文件的内容以及其他数据的基本值(如果有的话)。

有了标题和附件之间的匹配,我想我可以做任何我需要做的事情。

谢谢你给了我新的灵感StackOverFlow!

 类似资料:
  • 我在后端使用spring-boot 2.0.4,在前端使用vue 2.5.16 / axios 0.18.0,我希望将PDF文件上传到后端数据库,并从前端检索它们。 最初,我的灵感来自于spring部分的这个例子:https://grokonez . com/frontend/angular/angular-6/angular-6-client-upload-files-download-file

  • 我正在努力使用axios将xml文件上载到我的asp。net服务器。我正在使用vue端的以下代码获取一个xml文件,该文件正在工作,然后将其上载到我的服务器: 在asp。net端我得到了这个函数: 上载文件会导致代码415:不支持的媒体类型。 我找到了一些建议将xml格式化程序添加到我的项目中,这不起作用,而且我不想解析xml文件,我只想将文件保存到我的文件系统中。 我尝试将原始文件和解析的文本与

  • 如何将文件发送到WebService?为了上传文件,我需要使用multipart/form-data;我想知道如何使用PHP中的curl来实现这一点。 我的代码是: 服务器上的故障是: 我怎样才能解决这个问题?

  • 问题内容: 实际上,我正在使用带有Angular 2编码的接口的Spring REST API。 我的问题是我无法使用Angular 2上传文件。 我在Java中的Webresources是: 当我通过带有Auth标头等的URL请求调用它时(它具有适用于Chrome的Advanced Rest Client扩展),它完全可以正常工作 证明:(在这种情况下,一切正常) Spring配置文件和Pom依

  • 问题内容: 尝试将文件上传到S3存储桶时遇到问题。一切正常,除了我的文件参数似乎不合适。我正在使用Amazon S3 SDK从Node.js上载到S3。 这些是我的路线设置: 这是items.upload()函数: 将param 设置为类似字符串的效果很好。根据doc,param必须获取 (缓冲区,类型数组,Blob,字符串,ReadableStream)对象数据。 但是,上传文件对象失败,并显示

  • 问题内容: 是否可以使用http put方法将本地文件上传到保管箱?我正在上传文件,但没有文件?(“字节”:0) 如何向文件添加内容? 我的代码如下: 我的文件已成功上传,但没有内容?它是空的!该文档对我来说有点困惑:https : //www.dropbox.com/developers/core/docs#files_put 问题答案: @smarx:我正在发送一个空的HTTP PUT请求,最