gpt4 book ai didi

node.js - 使用 NodeJS 从服务器下载大量图像(>2GB)

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:37 34 4
gpt4 key购买 nike

我在我的项目中使用 AngularJS 和 NodeJS。我将图像存储到与 AWS-EC2 实例相连的 AWS-EFS 存储中。一切工作正常,直到我下载小图像(小于 1 GB)。当我尝试下载大图像(大于 1 GB)时,它抛出错误。

这是我的后端代码,

getTiff: function(req, res)
{
res.set('Content-Type', 'application/octet-stream')
var name = req.param('filename').split('.')[0]
var id = req.param('id')
var filePath = '/mys3storage/' + id + '/' + name +
'/3_dsm_ortho/2_mosaic/' + name + '_transparent_mosaic_group1.tiff'
files = fs.readFileSync(filePath)
res.send(files)
},

error: Sending 500 ("Server Error") response:

RangeError: Invalid typed array length
at new Uint8Array (native)
at createBuffer (buffer.js:23:15)
at allocate (buffer.js:98:12)
at new Buffer (buffer.js:53:12)
at Object.fs.readFileSync (fs.js:419:16)
at Object.module.exports.getAutocad.res.getContourLines.res.getContourPdf.res.getOrthoM (G:\desktop\unifliBackend\api\controllers\WebController.js:153:20)
at wrapper (G:\desktop\unifliBackend\node_modules\@sailshq\lodash\lib\index.js:3250:19)
at routeTargetFnWrapper (G:\desktop\unifliBackend\node_modules\sails\lib\router\bind.js:181:5)
at callbacks (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:164:37)
at param (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:138:11)
at param (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:135:11)
at param (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:135:11)
at pass (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:145:5)
at nextRoute (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:100:7)
at callbacks (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:167:11)
at alwaysAllow (G:\desktop\unifliBackend\node_modules\sails\lib\hooks\policies\index.js:224:11)
at routeTargetFnWrapper (G:\desktop\unifliBackend\node_modules\sails\lib\router\bind.js:181:5)
at callbacks (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:164:37)
at param (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:138:11)
at param (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:135:11)
at param (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:135:11)
at pass (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:145:5)
at nextRoute (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:100:7)
at callbacks (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:167:11)
at G:\desktop\unifliBackend\node_modules\sails\lib\router\bind.js:232:18
at callbacks (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:164:37)
at param (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:138:11)
at pass (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:145:5)
at nextRoute (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:100:7)
at callbacks (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:167:11)
at G:\desktop\unifliBackend\node_modules\sails\lib\router\bind.js:232:18
at callbacks (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:164:37)
at param (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:138:11)
at pass (G:\desktop\unifliBackend\node_modules\@sailshq\express\lib\router\index.js:145:5)

我也尝试过使用createReadStream(),但我一次可以下载一个文件,在第二个文件上,它会在浏览器上出现网络失败错误。请帮忙!

<小时/>
getTiff: function(req, res) {
res.set('Content-Type', 'application/octet-stream')
var name = req.param('filename').split('.')[0]
var filePath = req.param('id') var filePath = '/mys3storage/' + id + '/' + name + '/3_dsm_ortho/2_mosaic/' + name + '_transparent_mosaic_group1.tiff'
fs.createReadStream(filePath).pipe(res)
}

这是我使用的流代码。当我一次下载一个文件时,它工作正常。如果尝试一次下载两个文件,它将停止第二个文件并从浏览器显示“网络失败”

这是我的浏览器端代码:

$scope.downloadOrthoMission = function(idForDownload, missionIdForDownload) {
window.open(adminurl + 'getTiff/' + idForDownload + '/' + missionIdForDownload + '.tif', '_self')
}

最佳答案

刚刚提到了这个答案,

Nginx node.js express download big files stop at 1.08GB

它对我来说工作得非常好。

关于node.js - 使用 NodeJS 从服务器下载大量图像(>2GB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57629059/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com