multipart 相关问题

Multipart是一种内容类型,允许将多种MIME类型嵌入到单个消息中。

我可以解析多部分/混合响应而不必先将其转换为字符串吗?

我通过 HTTP 收到多部分/混合响应,其中包含一些 JSON 数据以及字节格式的 PDF。由于 Angular 无法天真地处理此类响应,我当前的方法是...

回答 1 投票 0

Spring boot分段上传最大文件大小

我正在将 Java 应用程序从非常旧的 Spring Boot 版本更新到版本 3.2.1。该应用程序的功能之一是将文件上传到S3。我可以毫无问题地上传小于 1MB 的文件...

回答 1 投票 0

使用 axios 进行多部分/与 blob 混合

下面的curl命令适用于API调用。 curl -k --user "un:$PASSWORD" -X POST -H "内容类型:多部分/混合" -F "blob=@binaryfile" -F 'metadata={"prop1...

回答 1 投票 0

邮递员多部分/表单数据错误:缺少开始边界

我正在尝试使用邮递员发送的多部分/表单数据请求来访问服务器的端点。我收到 400 Bad Request,原因是: org.jvnet.mimepull.MIMEParsingException:缺少开始

回答 4 投票 0

无法读取内容类型 vnd.3gpp.5gnas 的多部分数据

我有一个通过 REST 公开的 Spring Boot 应用程序。 收到请求后,它会用多部分数据响应调用者。请求应用程序迭代多部分数据并处理...

回答 1 投票 0

Spring 迁移:在 StandardServletMultipartResolver 上设置默认编码

我正在将 Spring 5 应用程序迁移到 Spring 6。在旧代码中,我使用 CommonsMultipartResolver 作为 MultipartResolver-Bean。自 Spring 6 以来,CommonsMultipartResolver 消失了,我......

回答 1 投票 0

如何使用 multipartResolver = StandardServletMultipartResolver 增加 Spring 6 (Tomcat 10) 上允许的最大多部分文件大小

已经围绕这个主题搜索并尝试了很多帖子......寻求帮助 这是一个在 Tomcat 10 中运行的 Spring 6 应用程序,带有接受多部分文件的 servlet,我们收到此错误。贝洛...

回答 1 投票 0

在springboot中是否可以同时获取Multipart文件和RequestBody?

我想在 Springboot 中有一个 post 方法,它将数据发布到数据库,其中我有一个表,其中保存员工的数据,也包括简历。我想要一份简历作为文件...

回答 1 投票 0

使用apache http客户端使用multipart上传文件到spring boot

我有一个 Spring Boot 应用程序,其端点如下 @PostMapping(“/”) 公共 ResponseEntity 上传(@RequestPart(“详细信息”)FileUploadDto

回答 1 投票 0

Camel 4 分段文件上传

我使用 Spring boot 和 apache Camel 创建了一个应用程序。当我使用 Camel 3.x 时,我使用这个答案来发布文件 multipart/form-data 文件。 但是自从我升级到 Camel 4.0.0 后就没有了...

回答 1 投票 0

如何使用erlang HTTP方法发送MIME(多部分媒体封装)内容类型消息?

我目前正在 Erlang 中开发一个模块,该模块发送一个 HTTP POST 请求,其中包含包含 JSON 和二进制数据的多部分/相关消息。但是,我在连接...

回答 1 投票 0

使用 MultipartEntity 构建 POST 请求

我想构造一个多部分请求,具有以下参数:名称(字符串)、电子邮件(字符串)和文件上传(文件)。我正在使用下面的 Java 代码(在 Android 中工作)。 httppost。

回答 2 投票 0

多部分/混合电子邮件在 Outlook/Microsoft Mail 中无法正确显示,文本显示为附件

我正在尝试创建包含多部分/混合内容的电子邮件,其中包含 2 个 HTML BodyPart(无附件)。 MIME 版本:1.0 日期:2021 年 12 月 9 日星期四 13:44:01 +0100 消息 ID: 主题:Th...

回答 1 投票 0

如何使用erlang http方法发送MIME(多部分媒体封装)内容类型消息

我目前正在 Erlang 中开发一个模块,该模块发送一个 HTTP POST 请求,其中包含包含 JSON 和二进制数据的多部分/相关消息。但是,我在连接...

回答 1 投票 0

AWS S3 分段上传 javascript sdk

我正在寻找针对非常大的文件的 S3 分段上传的示例实现。网上找了各种半途而废的实现,但没有一个能满足我的要求。

回答 2 投票 0

带有摘要验证的 ruby 多部分帖子图像

鉴于我有这个,使用Ruby 1.9.3p194 身份验证是摘要身份验证 需要“json” 需要“httpclient” API_URL=“https://api.somewhere.com/upload” API_KEY='废话' API_SECRET ='废话...

回答 1 投票 0

为什么org.springframework.core.io.AbstractResource中的getFile()会抛出异常?

首先,请理解,由于我使用翻译器,句子可能会很奇怪。 我尝试在 multipartFile 中使用 getResource() 返回的资源对象的 getFile() 方法,而

回答 1 投票 0

如何使用包含打字稿中文件的嵌套类型来模拟表单数据列表?

我得到了以下表格 - 我可以轻松地在打字稿中“附加”根fruit_image属性的文件,但当它是文件所在的给定类型的列表fruits[0]的一部分时则不能。如何

回答 1 投票 0

SizeLimitExceededException 与 FileSizeLimitExceededException - 不同文件大小的不同异常

当我们上传不同大小的文件时,我们会遇到不同的异常。允许的最大文件大小为 1 MB。 spring.servlet.multipart.max-file-size=1MB 当我们尝试上传 5.95 MB 的文件时...

回答 1 投票 0

Flutter Retrofit 上传分段会抛出 415 不支持的媒体类型

我正在尝试使用以下代码使用 Flutter Retrofit 的 Multipart 上传图像 @POST("apiUrl/上传/文件") @MultiPart() 未来 我正在尝试使用此代码使用 Flutter Retrofit 中的 Multipart 上传图像 @POST("apiUrl/upload/files") @MultiPart() Future<TSSuccessResponse<UploadFileRemoteResponse>> uploadFile( @Part() File file); 然而,它不断收到错误 415,表示不支持 application/form-octet MediaType。 E/flutter ( 8367): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: DioError [bad response]: The request returned an invalid status code of 415. E/flutter ( 8367): #0 DioMixin.fetch.<anonymous closure> (package:dio/src/dio_mixin.dart:530:7) E/flutter ( 8367): #1 _RootZone.runBinary (dart:async/zone.dart:1665:54) E/flutter ( 8367): #2 _FutureListener.handleError (dart:async/future_impl.dart:162:22) E/flutter ( 8367): #3 Future._propagateToListeners.handleError (dart:async/future_impl.dart:779:47) E/flutter ( 8367): #4 Future._propagateToListeners (dart:async/future_impl.dart:800:13) E/flutter ( 8367): #5 Future._completeError (dart:async/future_impl.dart:575:5) E/flutter ( 8367): #6 _SyncCompleter._completeError (dart:async/future_impl.dart:51:12) E/flutter ( 8367): #7 _Completer.completeError (dart:async/future_impl.dart:23:5) E/flutter ( 8367): #8 Future.any.onError (dart:async/future.dart:617:45) E/flutter ( 8367): #9 _RootZone.runBinary (dart:async/zone.dart:1665:54) E/flutter ( 8367): #10 _FutureListener.handleError (dart:async/future_impl.dart:162:22) E/flutter ( 8367): #11 Future._propagateToListeners.handleError (dart:async/future_impl.dart:779:47) E/flutter ( 8367): #12 Future._propagateToListeners (dart:async/future_impl.dart:800:13) E/flutter ( 8367): #13 Future._completeError (dart:async/future_impl.dart:575:5) E/flutter ( 8367): #14 Future._asyncCompleteError.<anonymous closure> (dart:async/future_impl.dart:666:7) E/flutter ( 8367): #15 _microtaskLoop (dart:async/schedule_microtask.dart:40:21) E/flutter ( 8367): #16 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5) I/flutter ( 8367): ╔ DioErrorType.badResponse I/flutter ( 8367): ║ { I/flutter ( 8367): ║ statusCode: 415, I/flutter ( 8367): ║ "File type application/octet-stream is not matching: image, pdf, powerpoint, prese I/flutter ( 8367): ║ ntation, video, video/quicktime" I/flutter ( 8367): ║ error: "Unsupported Media Type" I/flutter ( 8367): ║ } I/flutter ( 8367): ╚══════════════════════════════════════════════════════════════════════════════════════════╝ 然后我尝试更改请求以在 @Part() 标记中包含内容类型,正如有人提到的那样,以便它满足从 Retrofit 生成的文件。 @POST("apiUrl/upload/files") @MultiPart() Future<TSSuccessResponse<UploadFileRemoteResponse>> uploadFile( @Part(contentType: "image/png") File file); 但是它抛出了另一个错误,那就是 E/flutter ( 8367): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: DioError [bad response]: The request returned an invalid status code of 415. E/flutter ( 8367): #0 DioMixin.fetch.<anonymous closure> (package:dio/src/dio_mixin.dart:530:7) E/flutter ( 8367): #1 _RootZone.runBinary (dart:async/zone.dart:1665:54) E/flutter ( 8367): #2 _FutureListener.handleError (dart:async/future_impl.dart:162:22) E/flutter ( 8367): #3 Future._propagateToListeners.handleError (dart:async/future_impl.dart:779:47) E/flutter ( 8367): #4 Future._propagateToListeners (dart:async/future_impl.dart:800:13) E/flutter ( 8367): #5 Future._completeError (dart:async/future_impl.dart:575:5) E/flutter ( 8367): #6 _SyncCompleter._completeError (dart:async/future_impl.dart:51:12) E/flutter ( 8367): #7 _Completer.completeError (dart:async/future_impl.dart:23:5) E/flutter ( 8367): #8 Future.any.onError (dart:async/future.dart:617:45) E/flutter ( 8367): #9 _RootZone.runBinary (dart:async/zone.dart:1665:54) E/flutter ( 8367): #10 _FutureListener.handleError (dart:async/future_impl.dart:162:22) E/flutter ( 8367): #11 Future._propagateToListeners.handleError (dart:async/future_impl.dart:779:47) E/flutter ( 8367): #12 Future._propagateToListeners (dart:async/future_impl.dart:800:13) E/flutter ( 8367): #13 Future._completeError (dart:async/future_impl.dart:575:5) E/flutter ( 8367): #14 Future._asyncCompleteError.<anonymous closure> (dart:async/future_impl.dart:666:7) E/flutter ( 8367): #15 _microtaskLoop (dart:async/schedule_microtask.dart:40:21) E/flutter ( 8367): #16 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5) I/flutter ( 8367): ╔ DioErrorType.badResponse I/flutter ( 8367): ║ { I/flutter ( 8367): ║ statusCode: 415, I/flutter ( 8367): ║ message: "File type is not matching", I/flutter ( 8367): ║ error: "Unsupported Media Type" I/flutter ( 8367): ║ } I/flutter ( 8367): 我还尝试将 contentType 更改为“image/*”,但它在 MediaType.parser(来自生成的文件)上抛出错误,指出它是无效类型。 在这个场景中我有什么遗漏的吗?以前有人解决过这个问题吗?我尝试了[1],[2]和许多其他人提到的解决方案,但仍然陷入这个问题。提前谢谢。 需要注意的一点:此请求在具有相同文件的 Postman 中正常工作。 我通过将文件解析为 MultipartFiles 并动态设置其 contentType 解决了这个问题。我使用 mime 库来确定文件的 contentType。 将文件解析为MultipartFiles的方法: Future<List<MultipartFile>> filesToMultipartFiles(List<File> files) async { final multipartFiles = <MultipartFile>[]; for (final file in files) { final filename = file.path.split('/').last; final fileBytes = await file.readAsBytes(); List<int> header = []; for (var element in fileBytes) { if (element == 0) continue; header.add(element); } final mime = lookupMimeType(filename, headerBytes: header) ?? ''; final mimeParts = mime.split('/'); if (mimeParts.length != 2) throw Exception('Invalid file type'); final multipartFile = MultipartFile.fromBytes( fileBytes, filename: file.path.split('/').last, contentType: MediaType(mimeParts[0], mimeParts[1]), ); multipartFiles.add(multipartFile); } return multipartFiles; } API类: @RestApi() abstract class _FilesAPI { factory _FilesAPI(Dio dio) = __FilesAPI; @POST('/files') @MultiPart() Future<List<AppFile>> _uploadFile({ @Part(name: 'files[]') required List<MultipartFile> files, }); } class FilesAPI extends __FilesAPI { FilesAPI(Dio dio) : super(dio); Future<List<AppFile>> uploadFile({ required List<MultipartFile> files, }) { return _uploadFile( files: files, ); } } 我找到了问题的答案。有人在 github 中提出了这个问题,显然根本原因问题是 Dio 在我们未指定任何内容时将 MediaType 设置为 application/octet-stream。 如果我们像这样从改造中指定它(通过@Part的contentType), @POST("apiUrl/upload/files") @MultiPart() Future<TSSuccessResponse<UploadFileRemoteResponse>> uploadFile( @Part(contentType: "image/jpg") File file); Retrofit 生成的文件中的以下行仍会抛出错误,因为它与模式不匹配。 MediaType.parse(contentType) 我的解决方案是使用普通的 Dio 请求,然后按照前面的 github 链接的建议,使用 pub.dev 中的 mime 包指定 mime 类型。 import 'package:mime/mime.dart'; FormData data = FormData.fromMap({ "file": await MultipartFile.fromFile(file.path, filename: fileName, contentType: MediaType.parse("${lookupMimeType(fileName)}")), }); final response = await dio.post( "api/uploadFile", data: data, options: Options(headers: {"Content-Type": "multipart/form-data"}), ); 如果您想放弃改造代码生成,则接受的答案是可以的。但如果您仍然想继续使用 Retrofit 和 dio,只需导入您定义 @Multipart 的文件即可。 import 'package:http_parser/http_parser.dart'; 您仍然可以将内容类型保留为 contentType: "application/octet-stream" 如下: @Part(contentType: "application/octet-stream") File file, 这样,改造代码生成引发的错误将消失,因为 MediaType 来自 http_parser 库。

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.