我在标题中面临的问题与之前在这里提出的问题(Azure storage: Uploaded files with size zero bytes)非常相似,但是它是针对.NET的,而对于Java场景,上下文是我正在上传小型CSV文件每天(每个文件少于5 Kb)。此外,API代码使用的是我正在使用的最新版本的Azure API,而不是另一个问题使用的2010。
我不知道我错过了什么,但是另一种选择是在文件存储中进行,但是当然,一些同行推荐使用blob方法。
到目前为止,我的代码主要基于将文件作为blob块上传到Azure Samples git [page](https://github.com/Azure-Samples/storage-blob-java-getting-started/blob/master/src/BlobBasics.java)中显示的示例中。我已经完成了容器设置和文件重命名的步骤,这不是问题,但是上传后,我的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。
答案 0 :(得分:1)
您应该使用blob.uploadFromFile(fileName);
而不是blob.uploadFromFile(file.getAbsolutePath());
,因为uploadFromFile
方法需要绝对路径。而且您不需要blob.upload(fils,file.length());
。
请参阅Microsoft文档:https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-java#upload-blobs-to-the-container
答案 1 :(得分:0)
Azure团队回复了我在邮件中发送的同一查询,并且我已确认问题不在API上,而是由于Vaadin中的Upload组件的行为与往常不同({{3} }。无论是CloudBlockBlob还是BlobContainerUrl方法都可以。
开箱即用的上载组件需要将FileOutputStream手动实现到一个临时对象,这不同于在任何地方都可以看到的普通servlet对象。由于时间有限,我使用了他们的附加组件之一EasyUpload,因为它包含Viritin UploadFileHandler而不是弄清楚如何从头开始流对象。如果有更多的时间,我肯定会在我的沙盒工作区中试用MultiFileUpload插件,该插件还有其他有趣的东西。