问题:上传到Azure Blob存储后,包含从数据生成的csv文件的zip文件似乎已损坏。
上传前的zip文件如下:
在上载期间,我使用适用于Java的Azure Storage Blob客户端库(12.7.0版,但我也尝试了以前的版本)。这是我使用的代码(类似于SDK readme file中提供的示例):
public void uploadFileFromPath(String pathToFile, String blobName) {
BlobClient blobClient = blobContainerClient.getBlobClient(blobName);
blobClient.uploadFromFile(pathToFile);
}
然后我上传了文件:
当我直接从Storage Explorer中下载文件 时,文件已损坏。 我在做什么错了?
答案 0 :(得分:1)
根据您的描述,建议您使用以下方法上传zip文件
public void uploadFromFile(String filePath, ParallelTransferOptions parallelTransferOptions, BlobHttpHeaders headers, Map<String,String> metadata, AccessTier tier, BlobRequestConditions requestConditions, Duration timeout)
我们可以使用该方法设置内容类型
例如
BlobHttpHeaders headers = new BlobHttpHeaders()
.setContentType("application/x-zip-compressed");
Integer blockSize = 4* 1024 * 1024; // 4MB;
ParallelTransferOptions parallelTransferOptions = new ParallelTransferOptions(blockSize, null, null);
blobClient.uploadFromFile(pathToFile,parallelTransferOptions,headers,null, AccessTier.HOT, null, null);
有关更多详细信息,请参阅document
答案 1 :(得分:0)
最终这是我的错。上传文件之前,我没有关闭ZipOutputStream。当您对资源使用try并只想生成本地文件时,这并不是什么大问题。但就我而言,我想将文件上传到Blob存储(仍在try部分)。文件不完整(未关闭),因此它与损坏的数据一起出现在存储中。这是我从一开始就应该做的。
import React, { Component } from "react";
import { StyleSheet, View, Text } from "react-native";
import MapboxGL from "@react-native-mapbox-gl/maps";
MapboxGL.setAccessToken("pk.public-key");
class Maps extends Component {
componentDidMount() {
MapboxGL.setTelemetryEnabled(false);
}
render() {
return (
<View style={styles.page}>
<View style={styles.container}>
<MapboxGL.MapView
style={styles.map}
animated={false}
compassEnabled
showsMyLocationButton
>
<MapboxGL.Camera
animated={false}
compassEnabled={true}
followUserLocation
followUserMode='normal'
zoomLevel={16}
followZoomLevel={16}
animationDuration={10}
/>
<MapboxGL.MarkerView coordinate={[139.773, 35.6986]} />
<MapboxGL.UserLocation showsUserHeadingIndicator={true}>
</MapboxGL.UserLocation>
</MapboxGL.MapView>
</View>
</View>
);
}
}
毕竟,感谢您对@JimXu的帮助。我真的很感激。