如何解决如何使用azure-storage-file-datalake sdk发送文件的输入流作为响应?
我想在Web应用程序中下载较大的csv文件。 Web应用程序将api请求发送到服务,然后使用azure-storage-file-datalake中的ADLSClient命中Azure Data Lake Storage API。服务中的示例代码如下:
val client = getADLSClientGen2(dataSourceInstanceName,fileSystem)
val fileClient = client.getFileClient(filePath)
val outputStream: OutputStream = ByteArrayOutputStream()
fileClient.read(outputStream)
outputStream.close()
val buffer = outputStream as ByteArrayOutputStream
return ByteArrayInputStream(buffer.toByteArray())
在上面的代码中,整个文件在输出流中读取,然后在api请求中将其输入流作为响应发送。我希望能够发送从adls文件系统directlu读取的文件的inputstream
解决方法
据我了解,在您的Web应用程序上,您希望有一个存储在ADLS Gen2中的.CSV文件的输入流。由于ADLS Gen2是基于Azure存储服务构建的,因此在服务器端,我们仅可以为您的Web应用程序提供一个SAS token,并且Web应用程序可以发出HTTP请求以直接从ADLS Gen2下载此文件。从HTTP响应中获取此输入流。
这是生成blob sas令牌的代码:
result = [header]
for k,v in d.items():
row = [v.get(h,0) for h in header]
row[0] = k
result.append(row)
maven依赖项:
String connString = "<conntion string>";
String containerName = "<container name>";
String blobName = "<.csv name>";
BlobServiceClient client = new BlobServiceClientBuilder().connectionString(connString).buildClient();
BlobClient blobClient = client.getBlobContainerClient(containerName).getBlobClient(blobName);
BlobSasPermission blobSasPermission = new BlobSasPermission().setReadPermission(true); // grant read
// permission
// onmy
OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1); // 1 day to expire
BlobServiceSasSignatureValues values = new BlobServiceSasSignatureValues(expiryTime,blobSasPermission)
.setStartTime(OffsetDateTime.now());
System.out.println(blobClient.getBlobUrl() + "?" + blobClient.generateSas(values));
Web应用程序示例代码:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-blob</artifactId>
<version>12.9.0</version>
</dependency>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。