我需要与文件流一起发送一些帖子数据。我正在使用以下代码。
此代码取自 http://technet.rapaport.com/Info/LotUpload/SampleCode/Full_Example.aspx。
private Stream GetPostStream(string filePath, Dictionary<string, string> paramMap, string boundary) {
Stream postDataStream = new System.IO.MemoryStream();
//adding form data
string formDataHeaderTemplate = Environment.NewLine + "--" + boundary + Environment.NewLine +
"Content-Disposition: form-data; name=\"{0}\";" + Environment.NewLine + Environment.NewLine + "{1}";
foreach (KeyValuePair<string, string> pair in paramMap)
{
byte[] formItemBytes = System.Text.Encoding.UTF8.GetBytes(string.Format(formDataHeaderTemplate, pair.Key, pair.Value));
postDataStream.Write(formItemBytes, 0, formItemBytes.Length);
}
//adding file data
FileInfo fileInfo = new FileInfo(filePath);
string fileHeaderTemplate = Environment.NewLine + "--" + boundary + Environment.NewLine +
"Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"" +
Environment.NewLine + "Content-Type: application/vnd.ms-project" + Environment.NewLine + Environment.NewLine;
byte[] fileHeaderBytes = System.Text.Encoding.UTF8.GetBytes(string.Format(fileHeaderTemplate, "UploadMPPFile", fileInfo.FullName));
postDataStream.Write(fileHeaderBytes, 0, fileHeaderBytes.Length);
FileStream fileStream = fileInfo.OpenRead();
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
postDataStream.Write(buffer, 0, bytesRead);
}
fileStream.Close();
byte[] endBoundaryBytes = System.Text.Encoding.UTF8.GetBytes("--" + boundary + "--");
postDataStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
return postDataStream;
}
在 JAVA 上的服务器端,我使用 MPXJ 3rd 方库来读取文件数据。但是,我遇到了以下异常。它报告 Header 签名中的一些不匹配错误。
嵌套异常是:net.sf.mpxj.MPXJException: Error reading file] with root cause java.io.IOException: Invalid header signature; 读取 0x2D2D2D2D2D2D0A0D,预期 0xE11AB1A1E011CFD0 在 org.apache.poi.poifs.storage.HeaderBlockReader.(HeaderBlockReader.java:125) 在 org.apache.poi.poifs.filesystem.POIFSFileSystem.(POIFSFileSystem.java:153) 在 net.sf。 mpxj.mpp.MPPReader.read(MPPReader.java:84)
任何人都可以帮助我解决这种情况并提出一些解决方案!
非常感谢。