在我的Tomcat Servlet中,我有如下代码
List<Part> fileParts = request.getParts().stream().filter(part -> "file".equals(part.getName())).collect(Collectors.toList());
...
for (Part part: request.getParts())
{
...
String partname = part.getName();
LOGGER.log(Level.SEVERE, "part name " + partname);
// Logs: FileManager.handle_upload part name file
String headerNames = String.join(",", part.getHeaderNames());
LOGGER.log(Level.SEVERE, "header names " + headerNames);
// Logs: FileManager.handle_upload header names content-disposition
for (String headerName : part.getHeaderNames())
{
LOGGER.log(Level.SEVERE, headerName + ": " + String.join(",",part.getHeaders(headerName)));
}
// Logs 1 line: content-disposition: form-data; name=file; filename="DESIGNATION OF ENACTMENTS ACT CAP. 97 L.F.N. 1990 ACT CAP. D8 L.F.N. 2004
// Note no ending "
...
part.write(getIndexerDataDirectory() + File.separator + sc1FileEntry.FileUUID);
...
}
写入的文件以一些换行符开头,后跟文件名部分
这是意外的-我希望文件以屏幕快照中可见的第一个html标签开头。
从前端,我有一个使用httpClient的C#Winforms客户端,如下所示:-
HttpClient httpClient = null;
try
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
httpClient = new HttpClient();
httpClient.Timeout = new TimeSpan(0,0,10);
httpClient.DefaultRequestHeaders.Add("APIKey",APIKey);
httpClient.DefaultRequestHeaders.Add("IndexID", Index.IndexID.ToString());
httpClient.DefaultRequestHeaders.Add("IndexUUID", Index.IndexUUID);
foreach (SC1File file in Files)
{
MultipartFormDataContent formData = new MultipartFormDataContent();
foreach(StoredField field in file.StoredFields)
{
//MessageBox.Show("Fieldname " + field.FieldName);
//None of these are 'filename'
formData.Add(new StringContent(field.FieldValue),field.FieldName);
}
MessageBox.Show("FileContents", file.file_contents);
// Starts with html tags as expected
MessageBox.Show("FileName", file.file_name);
// Displays title correctly
// Which is
// DESIGNATION OF ENACTMENTS ACT CAP. 97 L.F.N. 1990 ACT CAP. D8 L.F.N. 2004
return;
formData.Add(new ByteArrayContent(Encoding.UTF8.GetBytes(file.file_contents)),"file",file.file_name);
HttpResponseMessage response = httpClient.PostAsync(endpoint, formData).Result;
if (response.IsSuccessStatusCode)
{
return;
}
else
{
throw new Exception("Request failed: " + response.StatusCode + " - " + response.Content.ReadAsStringAsync().Result);
}
}
} finally
{
httpClient.Dispose();
}
如您所见,我没有手动传递'filename'属性,并且我已经测试过我的文件内容实际上并不以此开头;文件名* =。看来httpClient是自己添加的。我在这里做错什么了吗,或者是一种控制这种行为的方法?