1

Le problème avec le code que j'utilise est que le fichier apparaît dans le blob, mais en tant que fichier de taille 0B. Comme si aucune donnée n'était écrite dans le blob.Comment télécharger une image dans un blob dans Azure?

Ceci est la forme que je l'utilise dans mon JSP:

<form method="POST" action="UploadServlet" enctype="multipart/form-data" > 
    <input type="file" name="file" id="file" /> <br/> 
    </br> 
    <input type="submit" value="Upload" name="upload" id="upload" /> 
</form> 

Et je le code suivant dans mon servlet:

try { 
       CloudStorageAccount account; 
       CloudBlobClient serviceClient; 
       CloudBlobContainer container; 
       CloudBlockBlob blob; 

       account = CloudStorageAccount.parse(storageConnectionString); 
       serviceClient = account.createCloudBlobClient(); 
       container = serviceClient.getContainerReference("gettingstarted"); 
       container.createIfNotExist(); 

       // Set anonymous access on the container. 
       BlobContainerPermissions containerPermissions; 
       containerPermissions = new BlobContainerPermissions(); 
            containerPermissions.setPublicAccess(BlobContainerPublicAccessType.CONTAINER); 
       container.uploadPermissions(containerPermissions); 

       FileItemFactory factory = new DiskFileItemFactory(); 

      ServletFileUpload fileUpload = new ServletFileUpload(factory); 

       //process only if its multipart content 
       InputStream is = null; 
       if (ServletFileUpload.isMultipartContent(request)) { 
        List items = fileUpload.parseRequest(request); 
        Iterator iter = items.iterator(); 
        while (iter.hasNext()) { 
         FileItem item = (FileItem) iter.next(); 
         if (!item.isFormField()) { 
          is = item.getInputStream(); 
          String name = new File(item.getName()).getName(); 
          System.out.println(name); 
          blob = container.getBlockBlobReference(name); 
          File fileReference = new File(item.getName()); 
          System.out.println(is); 
          blob.upload(is, fileReference.length()); 
         } 
        } 
       } 
       is.close(); 

       request.getRequestDispatcher("hello").forward(request, response); 

    } catch (Exeption e) { 
    } 
+0

cela devrait fonctionner, combien les gars dévier du tutoriel standard? –

+0

Je pense que la réponse par @Frans est une bonne prise. Votre flux d'entrée 'is' n'est pas positionné au début du flux. En C#, la syntaxe serait: 'is.Seek (0, SeekOrigin.Begin); // Positionne le flux au début, juste avant la ligne 'blob.upload()'. –

Répondre

3

Je ne connais pas la syntaxe équivalente en Java, mais en C#, vous devez souvent réinitialiser votre position dans le flux à 0 avant de la passer à la méthode de téléchargement de blob (c'est généralement le cas si le flux a déjà été lu - ce qui vous permettrait d'obtenir la longueur). Quelque chose comme

is.position = 0; 
blob.upload(is, fileReference.length()); 
Questions connexes