Ich habe einen sehr alten PHP-Code, der einen Post-Multipart/Form-Data an einen Tomcat-Server anfordert, und er gibt einen XML String als Teil und eine Datei als Anhang als zweiter Teil.
Auf der Java -Seite gibt es ein Servlet , das den gesamten Eingabestream von Hand analysiert und die Informationen aus der Nutzlast extrahiert. />
Multipart -Anforderungen waren im Allgemeinen nicht mehr möglich → gelöst durch Einstellen von erlaubigem MultiPartParsing = "True" < /code> Im Tomcat -Kontext der App; Punkt, ich habe versucht, den vorhandenen Code zu überarbeiten, um die von der Servlet-API angebotenen Funktionen zu verwenden, und habe ihn wie folgt überarbeitet: < /p>
Ich habe einen sehr alten PHP-Code, der einen Post-Multipart/Form-Data an einen Tomcat-Server anfordert, und er gibt einen XML String als Teil und eine Datei als Anhang als zweiter Teil.[code]function SendTmsNewsToHost($host, $port, $dest_url, $tnixdata, $attachment) {
// MIME attachments type recognization, not necessary for DAM /* require('mime_type_lib.php'); $mime_type = get_file_mime_type($attachment); */ $base_name=basename($attachment);
// include attachment length // (Everything coming after the first empty line (\r\n) -- including your boundary delimiters -- should be counted in the total length ) // but not first: + strlen($eol); $msg_length += strlen($tmsnews_attachment) + $file_length ; }
return $response; } [/code] Auf der Java -Seite gibt es ein Servlet , das den gesamten Eingabestream von Hand analysiert und die Informationen aus der Nutzlast extrahiert. /> Multipart -Anforderungen waren im Allgemeinen nicht mehr möglich → gelöst durch Einstellen von erlaubigem MultiPartParsing = "True" < /code> Im Tomcat -Kontext der App; Punkt, ich habe versucht, den vorhandenen Code zu überarbeiten, um die von der Servlet-API angebotenen Funktionen zu verwenden, und habe ihn wie folgt überarbeitet: < /p> [code]// Already existing code public MultipartFormData(final HttpServletRequest request, final long byteLimit) throws IOException {
String contentType = getContentType(request); if (contentType == null || !contentType.equalsIgnoreCase(CONTENT_TYPE)) { throw new IllegalArgumentException("invalid content type: " + contentType); }
if (getBoundary(request) == null) { throw new IllegalArgumentException("missing boundary"); }
try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file)); BufferedInputStream in = new BufferedInputStream(part.getInputStream())) { byte[] buffer = new byte[8192]; int bytesRead; while ((bytesRead = in.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } } return file.getPath(); }
// Already existing code private void addFileInfo(final String name, final FileInfo info) { List infos = fileInfos_.get(name); if (infos == null) { infos = new LinkedList(); }
infos.add(info);
fileInfos_.put(name, infos); } < /code> Ergebnis: Keine Fehler mehr, aber nur der XML wird tatsächlich verarbeitet. Der Anhang ist einfach verloren. NewsQueryService foo.NSPortal
log4j-init-file WEB-INF/etc/log4j.properties
log4j-read-intervall 10000
1
/home/nsc/tmp 104857600 418018841 10485760
[/code] Aber ich habe das gleiche Ergebnis erhalten. /> [code] multipart org.springframework.web.multipart.support.MultipartFilter
multipart NewsQueryService
< /code> und überarbeitete die obige Implementierung wie folgt: < /p> public MultipartFormData(final HttpServletRequest request, final long byteLimit) throws IOException { if(!(request instanceof MultipartHttpServletRequest multipartRequest)) throw new IllegalArgumentException("Not a multipart request");
long totalFileSizeBytes = 0; for(Entry file : multipartRequest.getFileMap().entrySet()) { MultipartFile multipartFile = file.getValue(); totalFileSizeBytes += multipartFile.getSize(); if (totalFileSizeBytes > byteLimit) throw new ByteLimitExceededException("byte limits exceeded");
File osFile = multipartFile.getResource().getFile(); addFileInfo(file.getKey(), new FileInfo(osFile.getPath(), osFile.getName(), multipartFile.getContentType())); } Enumeration parameterNames = multipartRequest.getParameterNames(); while (parameterNames.hasMoreElements()) { String parameterName = parameterNames.nextElement(); String[] parameterValues = multipartRequest.getParameterValues(parameterName); for (String value : parameterValues) { addParameter(parameterName, value); } } } < /code> Aber ich habe noch einmal das gleiche Ergebnis erhalten.public MultipartFormData(final HttpServletRequest request, final long byteLimit) throws IOException { try { long totalFileSizeBytes = 0; for(Part part : request.getParts()) { totalFileSizeBytes += part.getSize(); if (totalFileSizeBytes > byteLimit) throw new ByteLimitExceededException("byte limits exceeded");
String headerValue = part.getHeader(CONTENT_DISPOSITION); ContentDisposition disposition = parse(headerValue); String filename = disposition.getFilename(); if (filename == null) { addParameter(part.getName(), readValue(part)); } else { addFileInfo(part.getName(), new FileInfo(readData(part), filename, part.getContentType())); } part.delete(); } } catch (ServletException ex) { throw new IOException(ex); } } [/code] Aber auch dies hat am Ende das gleiche Ergebnis erbracht. Hat jemand eine Idee?
Ehrfurcht hat unsere Tomcat -Version von 9.0.102 auf 9.0.106 aktualisiert. Seitdem ist es nicht mehr möglich, mehr als 10 Dateien in einer einzelnen Postanforderung hochzuladen, die von der Seite des...
Es ist ein sehr einfacher Code, alles, was ich nur wenige Parameter und eine Datei -Upload übergeben möchte, hat seit kurzem gut funktioniert. //test change timeout to 30
Chilkat.Http oHTTP = new...
Es ist ein sehr einfacher Code, alles, was ich nur wenige Parameter und eine Datei -Upload übergeben möchte, hat seit kurzem gut funktioniert. //test change timeout to 30
Chilkat.Http oHTTP = new...
Es ist ein sehr einfacher Code, alles, was ich nur wenige Parameter und eine Datei -Upload übergeben möchte, hat seit kurzem gut funktioniert. //test change timeout to 30
Chilkat.Http oHTTP = new...
Es ist ein sehr einfacher Code, alles, was ich nur wenige Parameter und eine Datei -Upload übergeben möchte, hat seit kurzem gut funktioniert. //test change timeout to 30
Chilkat.Http oHTTP = new...