我正在使用 Spring MVC,这是我的方法:
/**
* Upload single file using Spring Controller.
*/
@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
public @ResponseBody ResponseEntity<GenericResponseVO<? extends IServiceVO>> uploadFileHandler(
@RequestParam("name") String name,
@RequestParam("file") MultipartFile file,
HttpServletRequest request,
HttpServletResponse response) {
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
// Creating the directory to store file
String rootPath = System.getProperty("catalina.home");
File dir = new File(rootPath + File.separator + "tmpFiles");
if (!dir.exists()) {
dir.mkdirs();
}
// Create the file on server
File serverFile = new File(dir.getAbsolutePath() + File.separator + name);
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(serverFile));
stream.write(bytes);
stream.close();
System.out.println("Server File Location=" + serverFile.getAbsolutePath());
return null;
} catch (Exception e) {
return null;
}
}
}
我需要在邮递员和文件中传递会话 ID。我怎样才能做到这一点?
[]
添加到文件上传参数的名称中,例如。 image[]
file[]
upload[]
在邮递员中,将方法类型设置为 POST。
然后选择 Body -> form-data -> 输入你的参数名称(文件根据你的代码)
在 Key 字段的右侧,将鼠标悬停在其上时,有一个下拉菜单可以在 Text/File 之间进行选择。选择文件,然后“选择文件”按钮将出现在值字段中。
对于其余的基于“文本”的参数,您可以像通常使用邮递员一样发布它。只需输入参数名称并从右侧下拉菜单中选择“文本”并为其输入任何值,点击发送按钮。你的控制器方法应该被调用。
缺失的视觉指南
您必须首先找到 File
的几乎不可见的淡灰色下拉菜单,它是解锁 Choose Files
按钮的神奇钥匙。
在您选择 POST
之后,然后选择 Body->form-data
,然后找到文件下拉菜单,然后然后选择“文件”,只有这样,“选择文件”按钮才会神奇地出现:
https://i.stack.imgur.com/GygPZ.png
也许你可以这样做:
https://i.stack.imgur.com/CcnSb.png
像这样 :
https://i.stack.imgur.com/OvBFy.png
正文 -> 表单数据 -> 选择文件
您必须写“文件”而不是“名称”
您也可以从 Body -> raw 字段发送 JSON 数据。 (只需粘贴 JSON 字符串)
https://i.stack.imgur.com/qltDv.png
https://i.stack.imgur.com/5y67n.jpg
看到所有答案后我感到很困惑,我找不到任何合适的屏幕截图来显示 Content Type
列。一段时间后,我自己找到了它。希望这会帮助像我这样的人。
以下是步骤:
点击邮递员的红色标记区域。现在检查绿色标记的选项(内容类型)。现在在黄色标记区域更改搜索内容类型。
就我而言:
invoice_id_ls (key) 包含 json 数据。文件包含文件数据。 placed_amount 包含普通的文本字符串。
CONTENT_TYPE
列中将几个键值对设置为 application/json
。在同一列中将文件保留为 auto
。
https://i.stack.imgur.com/YTh8M.png
从[SHOW COLUMNS]中选择[Content Type],然后将“application/json”的content-type设置为json文本的参数。
不要给出任何标题。将您的 json 数据放入 .json 文件中。选择两个文件,一个是 .txt 文件,另一个是 .json 文件作为请求参数键。
如果有人想以表单数据格式发送 json 数据,只需要像这样声明变量
邮差:
https://i.stack.imgur.com/e6d3Q.png
如您所见,描述参数将采用基本的 json 格式,结果如下:
{ description: { spanish: 'hola', english: 'hello' } }
请按照从上到下的步骤进行操作,如下图所示。
https://i.stack.imgur.com/lice6.png
在第三步,您将找到类型选择的下拉菜单,如下图所示
https://i.stack.imgur.com/qhFjC.png
正文 > 二进制 > 选择文件
https://i.stack.imgur.com/jyDsF.png
https://i.stack.imgur.com/X1Lym.png
如果您需要使用表单数据在多部分中上传文件并在同一个 POST 请求中发送 json 数据(Dto 对象)
在 Controller 中获取您的 JSON 对象作为 String 并通过添加此行使其反序列化
ContactDto contactDto = new ObjectMapper().readValue(yourJSONString, ContactDto.class);
如果有人需要:
正文 -> 表单数据
将字段名称添加为数组
https://i.stack.imgur.com/AwTNO.png
在弹簧休息侧使用以下代码:
@PostMapping(value = Constant.API_INITIAL + "/uploadFile")
public UploadFileResponse uploadFile(@RequestParam("file") MultipartFile file,String jsonFileVo) {
FileUploadVo fileUploadVo = null;
try {
fileUploadVo = new ObjectMapper().readValue(jsonFileVo, FileUploadVo.class);
} catch (Exception e) {
e.printStackTrace();
}
https://i.stack.imgur.com/lpV4c.png
如果您想发出 PUT
请求,只需将所有内容都作为 POST
请求,但添加 _method
=> PUT
到您的 form-data
参数。
POST
上有效,但在 PUT.
之前无效。谢谢!!
我需要同时传递:一个文件和一个整数。我是这样做的:
需要传递要上传的文件:按照 Sumit 的回答进行。请求类型:POST Body -> form-data 在标题 KEY 下,输入变量的名称(我的后端代码中的“文件”)。在后端:file = request.files['file'] 在“file”旁边,有一个下拉框,您可以在“File”或“Text”之间进行选择。选择“文件”并在“值”标题下出现“选择文件”。单击此打开一个窗口以选择文件。
2.需要传递一个整数:
去了:
参数
在 KEY 下输入变量名(例如:id),在 VALUE 下输入其值(例如:1)
在后端:
id = request.args.get('id')
工作!
file = request.files['file']
。谢谢,拯救了我的一天
https://i.stack.imgur.com/yqJGU.png
每个表单数据键都可以设置Content-Type,右边有个邮递员按钮可以添加Content-Type列,而且你不用在Controller里面从字符串解析json。
首先,在方法中设置帖子并填写链接API
然后选择 Body -> form-data -> 输入你的参数名称(文件根据你的代码)
如果您使用 cookie 来保持会话,您可以使用拦截器将 cookie 从浏览器共享给邮递员。
另外要上传文件,您可以使用 postman 上 body 选项卡下的 form-data 选项卡,您可以在其中提供键值格式的数据,并且您可以为每个键选择值文本/文件的类型。当您选择文件类型选项时出现上传文件。
如果您希望 Id 和 File 在一个对象中,您可以将您的请求对象作为标准添加到一种方法中,然后在 Postman 中将 Body 设置为表单数据并在您的键前面加上您的请求对象名称。例如 request.SessionId 和 request.File。
通过邮递员上传文件以及传递一些输入数据的步骤在下面的博客以及屏幕截图中得到了很好的讨论。在这篇博客中,api代码是用node js编写的。您可以通过它一次以获得更清晰的信息。
https://jksnu.blogspot.com/2021/09/how-to-create-post-request-with.html
您可以发送图像和可选/强制参数。
在邮递员中,有 Params
标签。
https://i.ibb.co/xDQ0KZL/ParamTab.jpg
在后端部分
Controller 中的 Rest 服务将混合使用 @RequestPart 和 MultipartFile 来服务此类 Multipart + JSON 请求。
@RequestMapping(value = "/executesampleservice", method = RequestMethod.POST,
consumes = {"multipart/form-data"})
@ResponseBody
public boolean yourEndpointMethod(
@RequestPart("properties") @Valid ConnectionProperties properties,
@RequestPart("file") @Valid @NotNull @NotBlank MultipartFile file) {
return projectService.executeSampleService(properties, file);
}
在前端:
formData = new FormData();
formData.append("file", document.forms[formName].file.files[0]);
formData.append('properties', new Blob([JSON.stringify({
"name": "root",
"password": "root"
})], {
type: "application/json"
}));
参见图片(POSTMAN 请求):
Click to view Postman request in form data for both file and json
要在邮递员中发送图像和 json 数据,您只需按照以下步骤操作。
制定您在邮递员中发帖的方法
转到正文部分并单击表单数据
提供您的字段名称 从下拉列表中选择文件,如下所示
您还可以提供您的其他字段。
现在只需在控制器中编写图像存储代码,如下所示。
https://i.stack.imgur.com/k3m0y.png
我的控制器:
public function sendImage(Request $request)
{
$image=new ImgUpload;
if($request->hasfile('image'))
{
$file=$request->file('image');
$extension=$file->getClientOriginalExtension();
$filename=time().'.'.$extension;
$file->move('public/upload/userimg/',$filename);
$image->image=$filename;
}
else
{
return $request;
$image->image='';
}
$image->save();
return response()->json(['response'=>['code'=>'200','message'=>'image uploaded successfull']]);
}
就是这样希望对你有帮助
POST
?PUT
呢?String
。为什么它没有映射到我的 DTO?@PostMapping ( value = "/byImageFile", consumes = { "multipart/form-data" }) public ResponseEntity<?> postMap( @RequestPart ( "imageFile") MultipartFile imageFile, @RequestPart ( "fieldsToExtract") RequestDto requestDto )
在这种情况下,我根本无法发送邮递员的请求RequestDto
。我把它当作一个字符串,解析Json
并将其显式映射到RequestDto
。