使用java休息webservice的Azure图像上传0B

问题描述:

@Path("/files") 
public class fileupload { 
    private String storageConnectionString= 
     "DefaultEndpointsProtocol=http;" + 
     "AccountName=xxxxxxxxxxx;" + 
     "AccountKey=xxxxxxxxxxxxxxxxxxxxx"; 

    @POST 
    @Path("/upload") 
    @Consumes(MediaType.MULTIPART_FORM_DATA) 
    public Response mymethod( 
      @FormDataParam("file") InputStream fileInputStream, 
      @FormDataParam("file") FormDataContentDisposition contentDispositionHeader 
       ) 
    { 
     String fileName = contentDispositionHeader.getFileName(); 
     UploadtoAzureStorage(fileInputStream,fileName); 
     String result="File saved to Azure storage, container name: \"mycontainer\""; 
     return Response.status(200).entity(result).build(); 
    } 


    public void UploadtoAzureStorage(InputStream fileInputStream,String filename) 
    { 
     try 
     { 
      CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString); 

      CloudBlobClient blobClient = storageAccount.createCloudBlobClient(); 

      CloudBlobContainer container = blobClient.getContainerReference("mycontainer"); 

      byte[] bytes = IOUtils.toByteArray(fileInputStream); 
      CloudBlockBlob blob = container.getBlockBlobReference(filename); 

      blob.upload(fileInputStream,bytes.length); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

图像名称上传到我的azure存储blob容器,但图像不上传。它显示为0B图像。使用java休息webservice的Azure图像上传0B

+1

不知道如何在Java中执行此操作,但在上传之前尝试将'InputStream'位置重置为'0'。 –

有一个已知的问题时使用的球衣,请排除球衣 - 多库的默认mimepull,并明确包括像这样的这种依赖性:

  <dependency> 
      <groupId>com.sun.jersey.contribs</groupId> 
      <artifactId>jersey-multipart</artifactId> 
      <version>1.9</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.jvnet</groupId> 
        <artifactId>mimepull</artifactId> 
       </exclusion> 
     </exclusions> 
     </dependency> 
     <dependency> 
     <groupId>org.jvnet.mimepull</groupId> 
     <artifactId>mimepull</artifactId> 
     <version>1.9</version> 
     </dependency> 

参考http://www.javaroots.com/2013/09/jersey-rest-service-stream-already.html了解更多详情。 也请考虑更改上传方法如下:

public void UploadtoAzureStorage(InputStream fileInputStream,String filename) 
     { 
      try 
      { 
       CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString); 

       CloudBlobClient blobClient = storageAccount.createCloudBlobClient(); 

       CloudBlobContainer container = blobClient.getContainerReference("mycontainer"); 

       byte[] bytes = IOUtils.toByteArray(fileInputStream); 
       CloudBlockBlob blob = container.getBlockBlobReference(filename); 

       BlobOutputStream blobOutputStream = blob.openOutputStream(); 
       ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes); 

       int next = inputStream.read(); 
       while (next != -1) { 
        blobOutputStream.write(next); 
        next = inputStream.read(); 
       } 
       blobOutputStream.close(); 

      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 

完成这些步骤后,我已经成功上传的文件。

+0

感谢您的帮助。它正在工作。 – rocketz