Java 执行多部分表单数据请求时流意外结束

Java 执行多部分表单数据请求时流意外结束,java,c#,rest,ms-office,vsto,Java,C#,Rest,Ms Office,Vsto,因此,我们有一个用java编写的服务器应用程序,它有一个rest服务,您可以以多部分请求的形式上传文件。这是方法的签名 @POST @Transactional(TxType.REQUIRED) @Path("/{id}") @Consumes(MediaType.MULTIPART_FORM_DATA) public ContentInfo uploadToInstanceFromMultipart(UploadRequest uploadRequest, @PathParam(JsonKey

因此,我们有一个用java编写的服务器应用程序,它有一个rest服务,您可以以多部分请求的形式上传文件。这是方法的签名

@POST
@Transactional(TxType.REQUIRED)
@Path("/{id}")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public ContentInfo uploadToInstanceFromMultipart(UploadRequest uploadRequest, @PathParam(JsonKeys.ID) String id) {
正如你所看到的,它没有什么特别之处,只是一种邮政服务。然而,在另一方面,我们正在编写一个ms office插件(VSTO),它使用RestSharp向该服务发送一个文件

  void Application_DocumentBeforeSave(Word.Document Doc, ref bool SaveAsUI, ref bool Cancel)
    {
        var client = new RestClient("...");
        client.Authenticator = new HttpBasicAuthenticator(...);
        var request = new RestRequest("api/content/{id}", Method.POST);
        var name = Doc.Name;
        var contentId = getContentId(name);
        var fileName = getName(name);

        request.AddUrlSegment("id", contentId); 
        request.AddFile(fileN, Doc.Path + "\\" + Doc.Name, "application/msword");

        IRestResponse response = client.Execute(request);
        var content = response.Content;
        MessageBox.Show(content);
我在这里也看不到任何特别之处,但当保存文件(从而将其发送到服务器)时,服务器会响应以下异常

(default task-33) Generic exception: javax.ws.rs.WebApplicationException: Processing of multipart/form-data request failed. Stream ended unexpectedly
归结起来就是

Caused by: org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly
at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:1005)
at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:903)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at org.apache.commons.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:134)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at org.apache.commons.fileupload.util.Streams.copy(Streams.java:100)
at org.apache.commons.fileupload.util.Streams.copy(Streams.java:70)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:347)
... 70 more

你知道这个请求是怎么回事吗?

关于这个话题有什么消息吗?很抱歉我的回答太晚了,是的。事实证明,我们的应用程序(在服务器端)没有考虑文档的新大小,因此在读取整个文档之前关闭了流。比如说,如果我们下载了一个文档,添加了一些新信息并尝试将其上载回,它失败了,因为它尝试读取更少的字节。此错误仅在使用新数据(例如新文本)时才被复制。如果我们下载并上传了它,而没有修改文件,那就好了。关于这个话题有什么新闻吗?我很抱歉回答得太晚,是的。事实证明,我们的应用程序(在服务器端)没有考虑文档的新大小,因此在读取整个文档之前关闭了流。比如说,如果我们下载了一个文档,添加了一些新信息并尝试将其上载回,它失败了,因为它尝试读取更少的字节。此错误仅在使用新数据(例如新文本)时才被复制。如果我们下载并上传了它而不修改文件,那就好了。