首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用BlobOutputStream上传Azure中的blob

使用BlobOutputStream上传Azure中的blob
EN

Stack Overflow用户
提问于 2016-11-22 18:04:16
回答 1查看 2K关注 0票数 2

我正试图从流中直接上传一个blob,因为我不知道这个流的长度,所以我决定尝试使用this answer

这不起作用,即使它从流中读取,也不会抛出任何异常--内容不会上传到我的容器中。

我没有问题从文件上传,它只发生时从一个流上传。

这是我的代码,我添加了一些输出来检查它是否正在读取什么东西,但这不是问题所在:

代码语言:javascript
运行
复制
try {
    CloudBlockBlob blob = PublicContainer.getBlockBlobReference(externalFileName);
    if (externalFileName.endsWith(".tmp")) {
        blob.getProperties().setContentType("image/jpeg");
    }
    BlobOutputStream blobOutputStream = blob.openOutputStream();
    int next = input.read();
    while (next != -1) {
        System.err.println("writes");
        blobOutputStream.write(next);
        next = input.read();
    }
    blobOutputStream.close();
    return blob.getUri().toString();

} catch (Exception usex) {
    System.err.println("ERROR " + usex.getMessage());
    return "";
}

它没有失败,但却不起作用。

还有别的办法吗?还是我漏掉了什么?

更新:我一直在检查,我认为问题在于InputStream本身,但我不知道为什么,因为如果我使用它来上传到亚马逊s3,那么相同的流就能正常工作。

EN

回答 1

Stack Overflow用户

发布于 2016-11-23 06:01:56

我试图复制你的问题,但失败了。根据您的代码,似乎唯一明显缺少的事情是在通过blobOutputStream.flush();关闭输出流之前不调用blobOutputStream.close();,但是如果缺少flush方法,它就能工作。

下面是我的测试代码。

代码语言:javascript
运行
复制
String STORAGE_CONNECTION_STRING_TEMPLATE = "DefaultEndpointsProtocol=https;AccountName=%s;AccountKey=%s;";

String accountName = "xxxx";
String key = "XXXXXX";
CloudStorageAccount account = CloudStorageAccount.parse(String.format(STORAGE_CONNECTION_STRING_TEMPLATE, accountName, key));
CloudBlobClient client = account.createCloudBlobClient();
CloudBlobContainer container = client.getContainerReference("mycontainer");
container.createIfNotExists();
String externalFileName = "test.tmp";
CloudBlockBlob blob = container.getBlockBlobReference(externalFileName);
if (externalFileName.endsWith(".tmp")) {
    blob.getProperties().setContentType("image/jpeg");
}
BlobOutputStream blobOutputStream = blob.openOutputStream();
String fileName = "test.jpg";
InputStream input = new FileInputStream(fileName);
int next = -1;
while((next = input.read()) != -1) {
    blobOutputStream.write(next);
}
blobOutputStream.close(); // missing in your code, but works if missing.
input.close();

如果你能更新更多的细节,我认为这有助于分析这个问题。如有任何问题,请随时通知我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40748705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档