我有一个嵌入式的jetty服务器来处理文件上传。
在上传、 of 、任意大小的文件时,文件被正确上传,请求结束。但是,由于某种原因,当上传的文件是视频文件时,jetty像往常一样启动request.getParts(),但它永远不会结束,并且始终处于空闲状态,最终以超时结束。
我尝试过许多其他文件格式、图像、zip、pdfs,它们都很好用。
问题出现在上传特定格式上,我不知道是因为它们是视频还是别的什么,但我从互联网上下载了很多视频样本,并尝试将它们上传到码头,问题出现在.mp4、.3gp and.mov上,但不是针对.mkv文件。
在jetty日志停止之前,下面是最后一行:
21:38:08:628 [qtp915349526-16] DEBUG: produceRawContent updated rawContentArrived to 12834785 and firstByteTimeStamp to 109772550050391 AsyncContentProducer@67554002[r=null,t=null,i=null,error=false,c=HttpChannelOverHttp@6f3547cb{s=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://192.168.1.100/api/v1/files/upload,age=8640}]
21:38:08:628 [qtp915349526-16] DEBUG: produceRawContent produced Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null} AsyncContentProducer@67554002[r=null,t=null,i=null,error=false,c=HttpChannelOverHttp@6f3547cb{s=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://192.168.1.100/api/v1/files/upload,age=8640}]
21:38:08:628 [qtp915349526-16] DEBUG: null interceptor, transformed content = raw content AsyncContentProducer@67554002[r=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},t=null,i=null,error=false,c=HttpChannelOverHttp@6f3547cb{s=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://192.168.1.100/api/v1/files/upload,age=8640}]
21:38:08:629 [qtp915349526-16] DEBUG: transformed content is not empty AsyncContentProducer@67554002[r=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},t=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},i=null,error=false,c=HttpChannelOverHttp@6f3547cb{s=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://192.168.1.100/api/v1/files/upload,age=8641}]
21:38:08:629 [qtp915349526-16] DEBUG: returning transformed content AsyncContentProducer@67554002[r=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},t=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},i=null,error=false,c=HttpChannelOverHttp@6f3547cb{s=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://192.168.1.100/api/v1/files/upload,age=8641}]
21:38:08:629 [qtp915349526-16] DEBUG: available = 8192 AsyncContentProducer@67554002[r=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},t=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},i=null,error=false,c=HttpChannelOverHttp@6f3547cb{s=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://192.168.1.100/api/v1/files/upload,age=8641}]
21:38:08:629 [qtp915349526-16] DEBUG: available=8192 HttpInput@1246248597 cs=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0} cp=org.eclipse.jetty.server.BlockingContentProducer@6a92fa25 eof=false
21:38:08:630 [qtp915349526-16] DEBUG: checkMinDataRate [m=0,t=109772550050391] AsyncContentProducer@67554002[r=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},t=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},i=null,error=false,c=HttpChannelOverHttp@6f3547cb{s=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://192.168.1.100/api/v1/files/upload,age=8642}]
21:38:08:630 [qtp915349526-16] DEBUG: nextTransformedContent AsyncContentProducer@67554002[r=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},t=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},i=null,error=false,c=HttpChannelOverHttp@6f3547cb{s=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://192.168.1.100/api/v1/files/upload,age=8642}]
21:38:08:630 [qtp915349526-16] DEBUG: returning transformed content AsyncContentProducer@67554002[r=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},t=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},i=null,error=false,c=HttpChannelOverHttp@6f3547cb{s=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://192.168.1.100/api/v1/files/upload,age=8642}]
21:38:08:631 [qtp915349526-16] DEBUG: nextContent = Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null} AsyncContentProducer@67554002[r=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},t=Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null},i=null,error=false,c=HttpChannelOverHttp@6f3547cb{s=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://192.168.1.100/api/v1/files/upload,age=8643}]
21:38:08:631 [qtp915349526-16] DEBUG: onReadIdle HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0}
21:38:08:631 [qtp915349526-16] DEBUG: nextContent async producer returned Content@714714d8{DirectByteBufferR@48200ff0[p=0,l=8192,c=8192,r=8192]={<<<\x1de.C\x1f\\\x1f]&M+\x95%\x7f\xDf\x03\x8aI\xE4'$\x0e!\xA6\x13...\xBd\xFd\xD9\x9a\xEa<\x93\xC2\xE5ux"vIf"LF\xA2t\x03=:>>>},spc=false,eof=false,err=null}
21:38:08:631 [qtp915349526-16] DEBUG: read produced 8192 byte(s) HttpInput@1246248597 cs=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0} cp=org.eclipse.jetty.server.BlockingContentProducer@6a92fa25 eof=false
21:38:08:632 [qtp915349526-16] DEBUG: reclaim Content@714714d8{DirectByteBufferR@48200ff0[p=8192,l=8192,c=8192,r=0]={\x1de.C\x1f\\\x1f]&...LF\xA2t\x03=:<<<>>>},spc=false,eof=false,err=null} AsyncContentProducer@67554002[r=Content@714714d8{DirectByteBufferR@48200ff0[p=8192,l=8192,c=8192,r=0]={\x1de.C\x1f\\\x1f]&...LF\xA2t\x03=:<<<>>>},spc=false,eof=false,err=null},t=Content@714714d8{DirectByteBufferR@48200ff0[p=8192,l=8192,c=8192,r=0]={\x1de.C\x1f\\\x1f]&...LF\xA2t\x03=:<<<>>>},spc=false,eof=false,err=null},i=null,error=false,c=HttpChannelOverHttp@6f3547cb{s=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://192.168.1.100/api/v1/files/upload,age=8644}]
21:38:08:632 [qtp915349526-16] DEBUG: releaseRequestBuffer HttpConnection@373d0634::SocketChannelEndPoint@ffd712a{l=/127.0.0.1:42069,r=/127.0.0.1:41214,OPEN,fill=-,flush=-,to=5/30000}{io=0/0,kio=0,kro=1}->HttpConnection@373d0634[p=HttpParser{s=CONTENT,12834785 of 13785725},g=HttpGenerator@16634b69{s=START}]=>HttpChannelOverHttp@6f3547cb{s=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://192.168.1.100/api/v1/files/upload,age=8644}
21:38:08:632 [qtp915349526-16] DEBUG: parseOctetContent(HeapByteBuffer@72ad9ab9[p=0,l=16384,c=16384,r=16384]={<<<N\x15#\xA2\xCa0\x01)\xD9a\x9f\xE8-\x99\x9c\xC5\xF4u\xEf\xE7\xC0\xBfS\xA9\x98...\xBd\xC7\xCc\x9a\x85\x02\x1c\xE5\x13\xBf\xC8qj\xFb}\x06O[\xF1\xE8\xE4)\xDd>>>})
21:38:08:632 [qtp915349526-16] DEBUG: Content=HeapByteBuffer@4aec8a46[p=0,l=16384,c=16384,r=16384]={<<<N\x15#\xA2\xCa0\x01)\xD9a\x9f\xE8-\x99\x9c\xC5\xF4u\xEf\xE7\xC0\xBfS\xA9\x98...\xBd\xC7\xCc\x9a\x85\x02\x1c\xE5\x13\xBf\xC8qj\xFb}\x06O[\xF1\xE8\xE4)\xDd>>>}, Last=false MultiPartParser{s=OCTETS}
21:38:08:633 [qtp915349526-16] DEBUG: nextTransformedContent AsyncContentProducer@67554002[r=null,t=null,i=null,error=false,c=HttpChannelOverHttp@6f3547cb{s=HttpChannelState@18720e7a{s=HANDLING rs=BLOCKING os=OPEN is=IDLE awp=false se=false i=true al=0},r=1,c=false/false,a=HANDLING,uri=http://192.168.1.100/api/v1/files/upload,age=8645}]这就是我如何设置multipart (它在服务器初始化中):
HttpConfiguration httpConfig = new HttpConfiguration();
httpConfig.setOutputBufferSize(1024);
ServerConnector connector = new ServerConnector(server, new HttpConnectionFactory(httpConfig));
connector.setPort(port);
server.addConnector(connector);
ServletHolder jerseyServlet = contextHandler.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/api/v1/*");
jerseyServlet.getRegistration().setMultipartConfig(new MultipartConfigElement("/storage/tmp", -1L, -1L, 1));让我提醒你,就像现在的一切一样,除了那些视频文件之外,文件上传对于任何文件都是完美的。
谢谢你的帮助
编辑:
为了上传视频,我使用PostMan和以下标题:
Content-Type:multipart/form-data
X-Auth-Token:{{token}}
X-UserId:{{userid}}
... plus the default postman headers我还有一个角度应用程序,它使用以下标题(从铬控制台粘贴的副本)执行这些请求:
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate
Accept-Language: en,it-IT;q=0.9,it;q=0.8,en-US;q=0.7
Connection: keep-alive
Content-Length: 13785725
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarymajD2TkV6jdqloTj
Host: 192.168.1.100
Origin: http://localhost:4200
Referer: http://localhost:4200/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36
X-Auth-Token: mytoken
X-UserId: myuserid我在这两种情况下都得到了同样的结果。仅就上下文而言,尽管我认为这并不重要,但我有一个虚拟机(Ubuntu20.04),托管接收请求的jetty服务器应用程序,并且在vscode提供的开发服务器上的windows 10 PC上本地运行该角应用程序。
发布于 2021-09-17 19:55:28
13 as是一个很小的上传大小,Jetty项目在单元测试期间上传1GB、4GB和10 1GB文件,既可以作为一个直接的POST,也可以作为一个multipart/form-data。
我还使用一个比PostMan更可靠的http客户机运行了一个快速测试。
服务器,运行Jetty11.0.6,并启用演示模块。
$ java -jar ~/code/jetty/distros/jetty-home-11.0.6/start.jar
2021-09-17 14:24:28.360:WARN :oe.jetty:main: demo-realm is deployed. DO NOT USE IN PRODUCTION!
2021-09-17 14:24:28.401:INFO :oejs.Server:main: jetty-11.0.6; built: 2021-06-29T16:16:33.537Z; git: 69469432898becda3aed32a32d4b0adbb7b6daee; jvm 11.0.12+7
2021-09-17 14:24:28.437:INFO :oejdp.ScanningAppProvider:main: Deployment monitor [file:///home/joakim/code/jetty/distros/bases/base11-demos/webapps/]
2021-09-17 14:24:28.813:WARN :oejshC.ROOT:main: The test-jetty webapp is deployed. DO NOT USE IN PRODUCTION!
2021-09-17 14:24:28.957:INFO :oejss.DefaultSessionIdManager:main: Session workerName=node0
2021-09-17 14:24:29.022:INFO :oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@2609b277{Test WebApp,/,file:///home/joakim/code/jetty/distros/bases/base11-demos/work/jetty-0_0_0_0-8080-ROOT_war-_-any-/webapp/,AVAILABLE}{/home/joakim/code/jetty/distros/bases/base11-demos/webapps/ROOT.war}
2021-09-17 14:24:29.182:WARN :oejshC.test:main: The test-jetty webapp is deployed. DO NOT USE IN PRODUCTION!
2021-09-17 14:24:29.246:INFO :oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@e6516e{Test WebApp,/test,file:///home/joakim/code/jetty/distros/bases/base11-demos/work/jetty-0_0_0_0-8080-demo-jetty_war-_test-any-/webapp/,AVAILABLE}{/home/joakim/code/jetty/distros/bases/base11-demos/webapps/demo-jetty.war}
2021-09-17 14:24:29.255:INFO :oejs.AbstractConnector:main: Started ServerConnector@4e9658b5{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
2021-09-17 14:24:29.267:INFO :oejs.Server:main: Started Server@51891008{STARTING}[11.0.6,sto=5000] @1561ms接下来,我要测试上传的文件.
$ ls -la security-cam.mp4
-rw-rw-r-- 1 joakim joakim 2394313303 Sep 17 14:23 security-cam.mp4
$ file security-cam.mp4
security-cam.mp4: ISO Media, MP4 v2 [ISO 14496-14]那是2.4GB
让我们使用卷曲上传,使用多个部分,并且不使用Expect: 100-Continue (如您的标题所示)
$ curl --verbose \
--output multipart-response.html \
--form file=@security-cam.mp4 \
--header "Expect: " \
http://localhost:8080/dump/info
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 127.0.0.1:8080...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> POST /dump/info HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.68.0
> Accept: */*
> Content-Length: 2394313511
> Content-Type: multipart/form-data; boundary=------------------------b3d2869d036926f9
>
} [65536 bytes data]
88 2283M 0 0 88 2016M 0 1006M 0:00:02 0:00:02 --:--:-- 1005M* We are completely uploaded and fine
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Set-Cookie: JSESSIONID=node03eutgygnhty4ltv47atz8yfb12.node0; Path=/
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< Content-Type: text/html;charset=utf-8
< Content-Length: 10721
< Server: Jetty(11.0.6)
<
{ [10721 bytes data]
100 2283M 100 10721 100 2283M 4704 1001M 0:00:02 0:00:02 --:--:-- 1001M
* Connection #0 to host localhost left intact因此,它发送了2.4GB,并收到和html响应的一些细节的请求,分析了整个请求主体内容与HttpServletRequest.getParts()和结果来自个人的javax.servlet.http.Part如下所示.
$ html2text multipart-response.html | grep -A5 "Parts"
Parts:
Part{n=file,fn=security-cam.mp4,ct=application/octet-
file: stream,s=2394313303,tmp=true,file=/home/joakim/code/jetty/distros/bases/
base11-demos/work/jetty-0_0_0_0-8080-ROOT_war-_-any-/upload/
MultiPart7325738426025573814}是的,所有的2.4GB都被Servlet看作是上传。
是一样的吗?所有上传都没有问题吗?
[client]$ sha1sum security-cam.mp4
85454d56bc8315fa0484d4d5a9cb9ad54933fbab security-cam.mp4
[client]$ sha1sum /home/joakim/code/jetty/distros/bases/base11-demos/work/jetty-0_0_0_0-8080-ROOT_war-_-any-/upload/MultiPart7325738426025573814
85454d56bc8315fa0484d4d5a9cb9ad54933fbab /home/joakim/code/jetty/distros/bases/base11-demos/work/jetty-0_0_0_0-8080-ROOT_war-_-any-/upload/MultiPart7325738426025573814是的,相同的文件、大小和内容。
在这一点上,问题似乎不是在Jetty。也许是泽西岛?或者更有可能是PostMan?
如果您可以在一个小的测试案例中复制这个问题,您可以尝试与https://github.com/eclipse/jetty.project/issues的Jetty开发人员联系,在这个复制案例中,我们可以缩小第三方库中存在问题的范围。
https://stackoverflow.com/questions/69215674
复制相似问题