Multipart是一种内容类型,允许将多种MIME类型嵌入到单个消息中。
我正在寻找针对非常大的文件的 S3 分段上传的示例实现。网上找了各种半途而废的实现,但没有一个能满足我的要求。
鉴于我有这个,使用Ruby 1.9.3p194 身份验证是摘要身份验证 需要“json” 需要“httpclient” API_URL=“https://api.somewhere.com/upload” API_KEY='废话' API_SECRET ='废话...
为什么org.springframework.core.io.AbstractResource中的getFile()会抛出异常?
首先,请理解,由于我使用翻译器,句子可能会很奇怪。 我尝试在 multipartFile 中使用 getResource() 返回的资源对象的 getFile() 方法,而
我得到了以下表格 - 我可以轻松地在打字稿中“附加”根fruit_image属性的文件,但当它是文件所在的给定类型的列表fruits[0]的一部分时则不能。如何
SizeLimitExceededException 与 FileSizeLimitExceededException - 不同文件大小的不同异常
当我们上传不同大小的文件时,我们会遇到不同的异常。允许的最大文件大小为 1 MB。 spring.servlet.multipart.max-file-size=1MB 当我们尝试上传 5.95 MB 的文件时...
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 库。
解析“multipart/form-data”有效负载,同时保留 Python 中各部分的顺序
我正在构建一个接受多个输入图像的HTTP服务器,而图像可以作为图像文件或缓冲区输入。 例如,请求命令可能如下所示: $curl -F image_file=@/p...
我正在编写一个脚本,将文件上传到需要多部分请求的 cgi 脚本,例如 HTML 页面上的表单。边界是一个唯一的标记,用于注释请求中的文件内容...
我正在尝试上传一个多部分表单,其中包含一个文件和一些其他数据。我知道我使用 FormFile 执行的文件的标签名称,但我也想获取文件的名称。我不是...
未知:多部分身体部位超出限制 -{value}。要增加限制,请更改 php.ini 中的 max_multipart_body_parts
在 Laravel-Filamentphp 应用程序中使用 Filepond 时,选择要上传的文件后,请求中会返回以下消息: 多部分身体部位超出限制 -727379948。包括...
在某些服务器中如果表单 enctype="multipart/form-data" 则 php 发布输入
我在 php 中使用 enctype="multipart/form-data" 表单发布值时遇到问题。似乎仅在某些服务器中存在问题。在我的本地主机服务器中它工作正常。在托管 cpanel 时,它...
这是我的申请: 函数主() { 路由器 := gin.Default() router.POST("用户", func(c *gin.Context) { 类型地址结构{ 城市字符串 `form:"city&...
我必须向外部 API 发送多部分/混合请求,并且我构建了一个 Mule 4 流程,其中端点配置为接收多部分/混合有效负载。我创建的端点应该接受
我正在用 Qt 编写一个多部分下载器。多个带有 http 标头“Range”的 QNetWorkRequest 用于下载文件。现在我将每个部分(QNetworkReply)收到的数据写入file.part1,file.pa...
使用 Microsoft Graph SDK 获取电子邮件的文本和 html 部分
我找了一整天了,还是没找到。我很惊讶没有人发布这样的例子。 在我们的应用程序中,显示电子邮件的文本/纯文本版本在大多数情况下就足够了...
谁能解释一下 Base64 以及 Multipart 的优点是什么 我知道 Multipart 比 Base64 更快... 但仍然有许多开发人员正在使用 Base64...我研究了这两个文档,但我...
Android Retrofir2 Multipart 远程 API 调用将内容类型设置为“application/json”
我的 Android Retrofit2 应用程序中有以下远程 REST API 调用。 @多部分 @POST(“用户/测试上传”) 暂停有趣的uploadUImage( @部分人:PersonFull, ...
Spring Boot - 在一个 @POSTMapping 操作中执行对象和图像上传
我正在学习Spring Boot,特别是加载图像。 以下两个端点效果很好 - 一个用于将图像加载到服务器中,另一个用于加载对象(在这种情况下是 PersonModel 对象...
我需要使用java来查看邮件。从这些邮件中,我想知道附件的名称(如果有的话),并且我想知道消息。 是否可以不仅打印
我一直在努力通过 Rest Assured 上传我的 csv 文件。它返回 500,而它在 Postman 上运行良好。 文件 myFile = 新文件("src est esources\myfile.csv"); 回应 = 给出...