【发布时间】:2019-12-25 22:44:36
【问题描述】:
我在标题中面临的这个问题与之前在此处提出的这个问题 (Azure storage: Uploaded files with size zero bytes) 非常相似,但它是针对 .NET 的,我的 Java 场景的上下文是我正在上传小型 CSV 文件每天(每个文件大约少于 5 Kb)。此外,API 代码使用我正在使用的最新版本的 Azure API,与其他问题使用的 2010 形成对比。
我不知道我错过了哪里,但另一种选择是在文件存储中进行,但当然我的一些同行推荐了 blob 方法。
到目前为止,我的代码主要基于在 Azure 示例 git [页面] (https://github.com/Azure-Samples/storage-blob-java-getting-started/blob/master/src/BlobBasics.java) 中显示的示例上将文件作为 blob 块上传。我已经完成了容器设置和文件重命名步骤,这不是问题,但是上传后,我的 Azure 域上的 blob 存储容器中的文件大小显示为 0 字节。
我尝试交替将文件转换为 FileInputStream 并将其作为流上传,但它仍然产生相同的方式。
fileName=event.getFilename(); //fileName is e.g eod1234.csv
String tempdir = System.getProperty("java.io.tmpdir");
file= new File(tempdir+File.separator+fileName); //
try {
PipedOutputStream pos = new PipedOutputStream();
stream= new PipedInputStream(pos);
buffer = new byte[stream.available()];
stream.read(buffer);
FileInputStream fils = new FileInputStream(file);
int content = 0;
while((content = fils.read()) != -1){
System.out.println((char)content);
}
//Outputstream was written as a test previously but didn't work
OutputStream outStream = new FileOutputStream(file);
outStream.write(buffer);
outStream.close();
// container name is "testing1"
CloudBlockBlob blob = container.getBlockBlobReference(fileName);
if(fileName.length() > 0){
blob.upload(fils,file.length()); //this is testing with fileInputStream
blob.uploadFromFile(fileName); //preferred, just upload from file
}
}
没有显示错误消息,只是我们知道文件触及 blob 存储并显示大小为 0 字节。这是一个单向过程,仅上传 CSV 格式的文件。在 blob 容器中,它应该显示这些上传的文件,每个文件的大小为 1-5 KB。
【问题讨论】:
-
关于
fils- 如果你按照我们在这里看到的那样运行它,难怪它的字节数为零。您正在阅读fils,直到其中没有剩余字节(返回-1,然后将其传递给上传方法。这意味着还有零字节要上传。您应该倒带或重新打开它。