使用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
答
有一个已知的问题时使用的球衣,请排除球衣 - 多库的默认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
不知道如何在Java中执行此操作,但在上传之前尝试将'InputStream'位置重置为'0'。 –