Java 如何使用azure存储文件datalake sdk将文件的inputstream作为响应发送?

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

我想在web应用程序中下载一个大型csv文件。web应用程序向服务发送api请求,然后该服务使用Azure存储文件datalake中的ADLSClient点击Azure Data Lake存储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())

在上面的代码中,在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();