Java 如何使用azure存储文件datalake sdk将文件的inputstream作为响应发送?
我想在web应用程序中下载一个大型csv文件。web应用程序向服务发送api请求,然后该服务使用Azure存储文件datalake中的ADLSClient点击Azure Data Lake存储api。服务中的示例代码如下所示:Java 如何使用azure存储文件datalake sdk将文件的inputstream作为响应发送?,java,azure,jax-rs,azure-data-lake,azure-data-lake-gen2,Java,Azure,Jax Rs,Azure Data Lake,Azure Data Lake Gen2,我想在web应用程序中下载一个大型csv文件。web应用程序向服务发送api请求,然后该服务使用Azure存储文件datalake中的ADLSClient点击Azure Data Lake存储api。服务中的示例代码如下所示: val client = getADLSClientGen2(dataSourceInstanceName, fileSystem) val fileClient = client.getFileClient(filePath) val outputStream: Out
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())
在上面的代码中,在outputstream中读取整个文件,然后将其inputstream作为api请求中的响应发送。我希望能够发送从adls文件系统directlu读取的文件的输入流据我所知,在您的web应用程序上,您希望有一个存储在adls Gen2中的.CSV文件的输入流。由于ADLS Gen2构建在Azure存储服务上,因此在服务器端,我们可以为您的web应用程序和web应用程序创建一个HTTP请求,直接从ADLS Gen2下载此文件,以便您可以从HTTP响应获取此输入流 这是生成blob sas令牌的代码:
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));
String-connString=”“;
字符串containerName=“”;
字符串blobName=“”;
BlobServiceClient=new BlobServiceClientBuilder().connectionString(connString.buildClient();
BlobClient BlobClient=client.getBlobContainerClient(containerName).getBlobClient(blobName);
BlobSasPermission BlobSasPermission=新建BlobSasPermission().setReadPermission(true);//格兰特·里德
//许可
//昂米
OffsetDateTime expiryTime=OffsetDateTime.now().plusDays(1);//1天到期
BlobServiceSasSignatureValues=新的BlobServiceSasSignatureValues(过期时间,blobSasPermission)
.setStartTime(OffsetDateTime.now());
System.out.println(blobClient.getBlobUrl()+“?”+blobClient.generateSas(values));
maven依赖项:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-blob</artifactId>
<version>12.9.0</version>
</dependency>
com.azure
azure存储blob
12.9.0
Web应用程序示例代码:
var xhr=new XMLHttpRequest();
open('GET','CVS文件URL with sas');
xhr.seenBytes=0;
xhr.onreadystatechange=函数(){
log(“状态更改..状态:+xhr.readyState”);
如果(xhr.readyState==3){
var newData=xhr.response.substr(xhr.seenBytes);
log(“newData:”);
document.body.innerHTML+=“新数据:”+newData+“
”;
xhr.seenBytes=xhr.responseText.length;
log(“seenBytes:+xhr.seenBytes”);
}
};
xhr.addEventListener(“错误”,函数(e){
控制台日志(“错误:+e”);
});
console.log(xhr);
xhr.send();