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

无法通过从Python调用Spring BootREST API POST上传文件

应子真
2023-03-14

我试图通过POST REST API调用(Spring Boot)从python脚本上传文件,因为想要自动化一些批处理工作。但是得到错误"无法将类型'java.lang.字符串'的值转换为属性'文件'所需的类型'org.springframework.web.multipart.MultipartFile':找不到匹配的编辑器或转换策略]...

python代码:

import requests
from requests.auth import HTTPBasicAuth
import json
from pathlib import Path


headers={'Accept': 'application/json, text/plain, */*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9',
'Authorization': 'Bearer XXXX',
'Connection': 'keep-alive',
'Content-Type': 'multipart/form-data'}

fp = 'C:/inputs/inputfile.txt'
files = {'file': open(fp, 'rb')}

payload = {
    'integrator': 1,
    'version': 2, 
    'file': files
}


resp = requests.post("http://localhost:8080/api/v1/upload/text", params=payload, headers=headers , files=files)
print (resp.text)
print ("status code " + str(resp.status_code))

我的API代码库(Java Springboot REST API):

@PostMapping(value = "/upload/text", consumes = MediaTypes.MULTIPART_FORM_DATA)
    public List<String> uploadText(
    // @formatter:off
        @ModelAttribute
        TextUploadModel uploadModel,
        Principal principal
    // @formatter:on
    ) throws Exception {
        String userName = principal.getName();

        return service.uploadTextFile(uploadModel, userName);
    }

文本上传模型。java是一个具有字符串集成器、字符串版本和多部分文件的POJO。我发现类似的SOF帖子没有得到回复

共有1个答案

孙德本
2023-03-14

问题可能与有效载荷字典的定义有关,您在那里包含文件参数,这很可能导致Spring将该参数视为字符串,因为参数中包含的每个参数都附加到请求的查询字符串中。

请从有效负载中删除file密钥:

payload = {
    'integrator': 1,
    'version': 2
}

文件上传信息在文件参数中提供:请求将负责将每个参数类型放置在正确的位置,设置内容类型,并建立适当的多部分边界。

请考虑阅读这个相关的问题,它对如何处理<代码>请求< /代码>多文件上传提供了很好的建议。

 类似资料:
  • 问题内容: 我想编写一个脚本将文件上传到FTP。 登录系统将如何工作?我正在寻找这样的东西: 以及任何其他登录凭据。 问题答案: 使用,您可以这样编写: 如果FTP主机需要TLS,请改用。 要检索它,可以使用: 编辑 : 要查找当前目录,请使用: FTP.pwd():返回服务器上当前目录的路径名。 要更改目录,请使用: FTP.cwd(pathname):设置服务器上的当前目录。

  • 问题内容: 我制作了一个脚本,该脚本使用$ .ajax和FormData将两个表单对象传递给PHP。一个表单对象是文本,另一个是文件。它作为独立脚本运行良好。但是,将其作为插件添加到Wordpress后,它一直给我。 我不能序列化formdata,仅仅是因为那样我将无法将文件传递给PHP中的回调函数。 ajax调用之前涉及FormData的JS: 上面的这一部分是100%正确的。 Ajax呼叫:

  • 问题内容: 选择图像,doc或pdf后,我想将它们通过okhttp3。如何进行此操作? 并在okhttp 3中 显示的错误是 谢谢。 问题答案: 所以我自己回答这个问题。 因此,我首先将输出流打开到一个临时文件。 扩展名取决于mime类型。您可以通过以下方式找到mime类型 现在从文件读取并将其内容写入临时文件 现在写入文件 最后 成功之后的最后

  • 问题内容: 我使用2个文件index.js,upload.php尝试通过ajax上传文件(img),如果成功追加到div 。 但是它不起作用,有几个问题,下面我的代码有什么建议吗? 谢谢。 upload.php 1. 还需要添加吗? 2. 并检查$ _FILES的大小或tmp_name是否仍使用? index.js 3.这几行是对的吗? 4.我错过或错了什么吗? 问题答案: 在其构造函数中接受一个

  • 本文向大家介绍通过Ajax使用FormData对象无刷新上传文件方法,包括了通过Ajax使用FormData对象无刷新上传文件方法的使用技巧和注意事项,需要的朋友参考一下 写在前面:本文说的这个方案有浏览器兼容性问题;所有主流浏览器的较新版本已经支持这个对象了,比如Chrome 7+、Firefox 4+、IE 10+、Opera 12+、Safari 5+,对兼容性比较敏感的网站慎用。 在工作中

  • 问题内容: 我想使用将文件(特别是图像)上传到REST Server 。我已经导入/添加了构建路径和。而且我在堆栈跟踪中收到以下错误。 这有效吗? HTTP POST代码 堆栈跟踪 问题答案: 您似乎缺少依赖项。 我有,,并用和在我的类路径罐子。 我也使用而不是使用header属性。 查看Internet媒体类型以了解更多详细信息