【问题标题】:Azure image upload using java rest webservice 0B使用 java rest webservice 0B 上传 Azure 图像
【发布时间】:2015-10-09 11:25:34
【问题描述】:
@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();
        }
    }

图像名称上传到我的天蓝色存储 blob 容器,但图像未上传。它显示为 0B 图像。

【问题讨论】:

  • 不确定如何在 Java 中执行此操作,但尝试在上传之前将 InputStream 位置重置为 0

标签: java rest azure blob


【解决方案1】:

使用 jersey 时存在一个已知问题,请排除 jersey-multipart 库中默认的 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();
          }
      }

经过这些步骤,我已经成功上传文件了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-22
    • 2018-02-22
    • 2019-10-16
    • 2013-01-08
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多