我想问一个关于这个的问题multipart/form-data.在HTTP标头中,我发现了Content-Type: multipart/form-data; boundary=???.
是???免费的用户定义?或者它通常来自HTML?我可以定义??? = abcdefg吗?
我有一个表单数据以及要在同一个POST中发送的文件.例如,{duration:2000,file:test.wav}.我在使用python请求的multipart/form-data发布中看到了很多线程.它们很有用,特别是这个.
我的样例请求如下:
files = {'file': ('wavfile', open(filename, 'rb'))}
data = {'duration': duration}
headers = {'content-type': 'multipart/form-data'}
r = self.session.post(url, files=files, data=data, headers=headers)
Run Code Online (Sandbox Code Playgroud)
但是当我执行上面的代码时,我收到此错误:
5:59:55.338 Dbg 09900 [DEBUG]解析来自handler [null]的异常:org.springframework.web.multipart.MultipartException:无法解析multipart servlet请求; 嵌套异常是org.apache.commons.fileupload.FileUploadException:请求被拒绝,因为没有找到多部分边界.
所以我的问题是:1)如何查看发送请求的内容?无法使用wireshark,它不在网络上.2)为什么编码数据中缺少边界?我错过了什么,请指出.
我目前正在尝试将文件从Angular 4前端上传到Spring Webflux控制器.控制器能够读取@RequestPart值但抛出415 UnsupportedMediaTypeStatusException.
UploadController
@PostMapping( consumes = MediaType.MULTIPART_FORM_DATA_VALUE )
public Mono<Void> save(@RequestPart("file")MultipartFile file) {
log.info("Storing a new file. Recieved by Controller");
this.storageService.store(file);
return Mono.empty();
}
Run Code Online (Sandbox Code Playgroud)
log.info()方法不执行,因此似乎在执行方法之前抛出错误.
错误信息
org.springframework.web.server.UnsupportedMediaTypeStatusException: Response status 415 with reason "Content type 'image/png' not supported"
at org.springframework.web.reactive.result.method.annotation.AbstractMessageReaderArgumentResolver.readBody(AbstractMessageReaderArgumentResolver.java:206) ~[spring-webflux-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.web.reactive.result.method.annotation.AbstractMessageReaderArgumentResolver.readBody(AbstractMessageReaderArgumentResolver.java:124) ~[spring-webflux-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.web.reactive.result.method.annotation.RequestPartMethodArgumentResolver.lambda$resolveArgument$0(RequestPartMethodArgumentResolver.java:99) ~[spring-webflux-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:118) ~[reactor-core-3.1.5.RELEASE.jar:3.1.5.RELEASE]
at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:450) ~[reactor-core-3.1.5.RELEASE.jar:3.1.5.RELEASE]
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76) ~[reactor-core-3.1.5.RELEASE.jar:3.1.5.RELEASE]
at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:450) ~[reactor-core-3.1.5.RELEASE.jar:3.1.5.RELEASE]
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) ~[reactor-core-3.1.5.RELEASE.jar:3.1.5.RELEASE]
at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:450) ~[reactor-core-3.1.5.RELEASE.jar:3.1.5.RELEASE]
at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.drainAsync(FluxFlattenIterable.java:391) ~[reactor-core-3.1.5.RELEASE.jar:3.1.5.RELEASE]
at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.drain(FluxFlattenIterable.java:633) ~[reactor-core-3.1.5.RELEASE.jar:3.1.5.RELEASE]
at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.onNext(FluxFlattenIterable.java:238) ~[reactor-core-3.1.5.RELEASE.jar:3.1.5.RELEASE]
at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:450) ~[reactor-core-3.1.5.RELEASE.jar:3.1.5.RELEASE]
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onNext(FluxFilterFuseable.java:87) …Run Code Online (Sandbox Code Playgroud) 我正在编写一个web api,它有一个post方法接受从UI上传的文件.
public async Task<List<string>> PostAsync()
{
if (Request.Content.IsMimeMultipartContent("form-data"))
{
string uploadPath = HttpContext.Current.Server.MapPath("~/uploads");
var streamProvider = new MyStreamProvider(uploadPath);
await Request.Content.ReadAsMultipartAsync(streamProvider);
return streamProvider.FileData
.Select(file => new FileInfo(file.LocalFileName))
.Select(fi => "File uploaded as " + fi.FullName + " (" + fi.Length + " bytes)")
.ToList();
}
else
{
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.BadRequest, "Invalid Request!");
throw new HttpResponseException(response);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我邮递员要求上述行动.我将content-type标头设置为multipart/form-data,但在执行操作期间发生错误.这是错误信息正文:
"提供了无效的'HttpContent'实例.它没有带'border'参数的'multipart'内容类型标头.\ r \nParameter name:content"
我去了邮差标题,但我发现请求标题内容类型in设置为application-json.

谁能帮我?
有没有人知道一个小测试工具(如Firefox的Rest/RestTool)能够上传文件并在同一个帖子请求(Multipart)中发送文本正文?
我知道如何发布json,也知道如何在Postman中以多部分形式发布文件。但是我怎么能一起做。例如:
这是我的杰森要发布的内容:
{
"title": "Post title yeah",
"body": "My first post body"
}
Run Code Online (Sandbox Code Playgroud)
那么,如何与上述json一起发布image.jpg位于/home/me/Desktop?
更新:请注意,我想这样使用JSON发送文件,所以我的问题与此不同,后者是有关使用Postman进行多部分表单发送的。
您能告诉我如何在不使用文件选项的情况下上传文件吗?我想知道如何通过以下方法上传文件。
我不想使用“文件”>“选择文件”选项。我想通过 newman 执行并使用“文件”>“选择文件”选项,但它失败了。
我尝试使用下面的方法,但它给出 404 作为响应。
Body - Raw-->
{
"uploadType": "ORDER",
"headerIncluded":"false",
"file":"C:/Users/b3badm/Desktop/SIndoora/FileImport_ValidProducts.txt"
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用一些表单数据上传文件.为了测试我的api,我使用Postman.当我尝试使用文件和其他字段进行POST时,我收到了此错误
{
"detail": "JSON parse error - 'utf-8' codec can't decode byte 0xbf in position 10: invalid start byte"
}
Run Code Online (Sandbox Code Playgroud)
这是我的模型:
class Music(models.Model):
album = models.ForeignKey(Album, related_name='tracks')
playlist = models.ForeignKey(Playlist, null=True, related_name='tracks')
name = models.CharField(max_length=200, unique=True)
dropbox_id = models.CharField(max_length=500, null=True)
favorite = models.BooleanField(default=False)
created_at = models.DateField(auto_now_add=True)
counter = models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)
串行:
class MusicSerializer(serializers.ModelSerializer):
file = serializers.FileField(required=True)
class Meta:
model = Music
fields = ('id', 'favorite', 'created_at', 'counter', 'file', 'name', 'album', 'playlist')
Run Code Online (Sandbox Code Playgroud)
并查看:
class MusicViewSet(viewsets.ModelViewSet):
queryset = Music.objects.all()
serializer_class = MusicSerializer
def …Run Code Online (Sandbox Code Playgroud) 我尝试使用 graph-api v2.3 和 qNetworkAccessManager 将视频上传到 facebook。我成功通过授权并开始上传过程,但上传第一个块以 http 错误 500 和 facebook api 错误代码 1363030 结束。看起来就像 fb 服务器无法访问,但旧 api (2.1) 工作正常。所以,我想,这可能是我的问题。有一部分代码是我发布视频块的
QNetworkRequest request;
request.setUrl(QUrl(QString("https://graph-video.facebook.com/v2.3/me/videos")));
QHttpMultiPart *body = new QHttpMultiPart(QHttpMultiPart::FormDataType);
_file = new QFile(filename);
_file->open(QIODevice::ReadOnly);
QHttpPart tokenPart, phasePart, sessionPart, offsetPart, dataPart;
tokenPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"access_token\""));
tokenPart.setBody(accessToken.toUtf8());
phasePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"upload_phase\""));
phasePart.setBody(phaseTransfer.toUtf8());
sessionPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"upload_session_id\""));
sessionPart.setBody(_sessionId.toUtf8());
offsetPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"start_offset\""));
offsetPart.setBody(QString::number(_startOffset).toUtf8());
QHttpPart dataPart;
dataPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"video_file_chunk\""));
QByteArray data = _file->read(_endOffset - _startOffset);
dataPart.setBody(data);
body->append(tokenPart);
body->append(phasePart);
body->append(offsetPart);
body->append(sessionPart);
body->append(dataPart);
_server->post(request, body);
Run Code Online (Sandbox Code Playgroud)
也许有人知道解决方案或者只是有 graph-api v2.3 的工作示例?