9
votes

Bibliothèque et exemples d'analyse multipart / formes-formes d'introuvream

La réponse à un type de requête HTTP que j'envoie est une photo multipart / formulaire ressemble à quelque chose comme: xxx

J'utilise Apache pour envoyer et recevoir les demandes HTTP, mais Je n'arrive pas à trouver un moyen facile de l'utiliser pour analyser ce qui précède pour un accès facile aux champs de formulaire.

Je préférerais ne pas réinventer la roue, alors je cherche une bibliothèque qui me permet de faire quelque chose de similaire à: xxx

toute suggestion?


0 commentaires

3 Réponses :


15
votes

exemple de code à l'aide de constructeur obsolète: xxx


1 commentaires

Bon code Cependant, vous n'imprimez que des en-têtes et du corps en tant que chaîne, il demande quelque chose comme Multipart.get ("bin");



1
votes

exemple de code sans utiliser de méthodes obsolètes.

import com.google.common.net.MediaType;
import org.apache.commons.fileupload.RequestContext;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;

public class SimpleRequestContext implements RequestContext {
    private final Charset charset;
    private final MediaType contentType;
    private final byte[] content;

    public SimpleRequestContext(Charset charset, MediaType contentType, byte[] content) {
        this.charset = charset;
        this.contentType = contentType;
        this.content = content;
    }

    public String getCharacterEncoding() {
        return charset.displayName();
    }

    public String getContentType() {
        return contentType.toString();
    }

    @Deprecated
    public int getContentLength() {
        return content.length;
    }

    public InputStream getInputStream() throws IOException {
        return new ByteArrayInputStream(content);
    }
}

{
  ...
  Charset encoding = UTF_8;
  RequestContext requestContext = new SimpleRequestContext(encoding, contentType, body.getBytes());
  FileUploadBase fileUploadBase = new PortletFileUpload();
  FileItemFactory fileItemFactory = new DiskFileItemFactory();
  fileUploadBase.setFileItemFactory(fileItemFactory);
  fileUploadBase.setHeaderEncoding(encoding.displayName());
  List<FileItem> fileItems = fileUploadBase.parseRequest(requestContext);
  ...
}


0 commentaires

7
votes

Je voulais une solution qui a fonctionné à partir d'Azure Fonctions avec tout ce qui étant en mémoire et pas de dépendance sur les API de servlet ou de portail. Alors j'ai écrit un: xxx

et un échantillon d'utilisation avec des fonctions Azure: xxx


2 commentaires

J'utilise cela pour mon application de fonctions Azure. Fonctionne très bien! Merci!!


Wow. J'utilise AWS Lambda et cet exemple fonctionne parfaitement hors de la boîte. Merci d'avoir pris le temps de le partager !!!