Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Azure Java函数返回从Datalake存储下载的文件?_Java_Azure - Fatal编程技术网

如何从Azure Java函数返回从Datalake存储下载的文件?

如何从Azure Java函数返回从Datalake存储下载的文件?,java,azure,Java,Azure,我正在尝试创建一个Azure Functions HTTP触发器,该触发器从DataLake存储Gen2下载指定URI处的文件并将其返回给客户端 通过参考下面的URL,我能够在函数的实例(VM)上创建从Data Lake Storage Gen2下载文件的函数 但是,我不知道如何实现将下载的文件返回到请求客户端的过程 请帮帮我 /** * *HTTP触发器 * * *@param-request:request *@param context:函数执行上下文 *@return-HttpRes

我正在尝试创建一个Azure Functions HTTP触发器,该触发器从DataLake存储Gen2下载指定URI处的文件并将其返回给客户端

通过参考下面的URL,我能够在函数的实例(VM)上创建从Data Lake Storage Gen2下载文件的函数

但是,我不知道如何实现将下载的文件返回到请求客户端的过程

请帮帮我

/**
* 
*HTTP触发器
* 
*
*@param-request:request
*@param context:函数执行上下文
*@return-HttpResponseMessage
* /
@FunctionName(“HttpExample”)
公共HttpResponseMessage运行(
@HttpTrigger(
name=“req”,
方法={HttpMethod.GET,HttpMethod.POST},
authLevel=AuthorizationLevel.ANONYMOUS)HttpRequestMessage请求,
最终执行(上下文){
context.getLogger().info(“开始HTTP触发器”);
log.info(“开始HTTP触发器”);
String downloadFilePath=“D:\\home\\site\\wwwroot\\downloadFile.txt”;
字符串datalakuri=request.getQueryParameters().Get(“datalakuri”);
整数大小=Integer.valueOf(request.getQueryParameters().Get(“size”);
//字符串datalakuri=request.getBody().OrElse(“dummy”);
context.getLogger().info(“获取大小:+size”);
context.getLogger().info(“getdatalakuri:+datalakuri”);
context.getLogger().info(“Get downloadFilePath:+downloadFilePath”);
log.info(“获取Datalakuri:+Datalakuri”);
log.info(“Get downloadFilePath:+downloadFilePath”);
字节[]结果=新字节[大小];
试一试{
dataLakeFileSystemClient=createDatalakeClient(accountName、accountKey、fileSystemName);
//文件路径
文件=新文件(下载文件路径);
下载文件(Datalakuri,文件);
结果=getByteArrayFromFile(文件);
file.delete();
return request.createResponseBuilder(HttpStatus.OK).body(result.build();
}捕获(例外e){
String stacktrace=ExceptionUtils.getStackTrace(e);
context.getLogger().log(Level.SEVERE,stacktrace);
log.fatal(stacktrace);
return request.createResponseBuilder(HttpStatus.BAD_request).body(stacktrace.build();
}
}
公共字节[]getByteArrayFromFile(文件文件)引发IOException{
FileInputStream inputStream=新的FileInputStream(文件);
返回IOUtils.toByteArray(inputStream);
}
/ **
* 
*创建DataLakeFileSystemClient的实例
* 
*
*@param accountName:存储帐户名
*@param accountKey:key
*@param fileSystemName:容器名称
*@return DataLakeFileSystemClient
* /
公共DataLakeFileSystemClient createDatalakeClient(字符串accountName、字符串accountKey、字符串fileSystemName){
//创建服务客户端
StorageSharedKeyCredential sharedKeyCredential=
新的StorageSharedKeyCredential(accountName、accountKey);
DataLakeServiceClientBuilder=新DataLakeServiceClientBuilder();
builder.credential(sharedKeyCredential);
builder.endpoint(“https://“+accountName+”.dfs.core.windows.net”);
//数据湖服务客户端
DataLakeServiceClient DataLakeServiceClient=builder.buildClient();
//正在准备创建连接客户端
DataLakeFileSystemClient DataLakeFileSystemClient=dataLakeServiceClient.getFileSystemClient(fileSystemName);
返回dataLakeFileSystemClient;
}
/ **
* 
*将DataLakeStorage文件复制到BlobStorage。
* 
*
*@param srcdatalakuri复制源datalakestreage文件的URI
*@param文件
*
*@异常文件复制失败
*
* /
public void downloadFile(字符串srcdatalakuri,File File)引发异常{
//从DataLakeStoreRage URI获取文件夹路径和文件名
字符串dlDirectoryName=StorageUtils.getFolderPathFromFileUri(srcDataLakuri);
字符串dlFileName=StorageUtils.getFileName(srcdatalakuri);
//从数据湖创建
DataLakeDirectoryClient DataLakeDirectoryClient=this.dataLakeFileSystemClient.getDirectoryClient(dlDirectoryName);
DataLakeFileClient DataLakeFileClient=dataLakeDirectoryClient.getFileClient(dlFileName);
try(OutputStream targetStream=新文件OutputStream(文件)){
dataLakeFileClient.read(targetStream);
}捕获(例外e){
投掷e;
}
}