21

I have download a zip file from s3 bucket then extracting the zip file and finally upload one file to s3 bucket in Lambda function using Node JS.But am getting the error

==> Error: EROFS: read-only file system, open './tmp/test.zip' "Process exited before completing> request"

exports.handler = function (callback) {

downloadZipFile(params, downloadPath, function (err) {
    if (err) {
        callback(err);
    } else {
        processZipFile(downloadPath, function (err) {
            if (err) {
                callback(err);
            } else {
                callback(null);
            }
        });

      }
  });

};

function downloadZipFile(params, downloadPath, callback) {

const file = fs.createWriteStream(downloadPath);

s3.getObject(params)
    .on('httpData', function (chunk) {

        file.write(chunk);
    })
    .on('success', function () {

        callback(null);
    })
    .on('error', function (err) {

        callback(err);
    })
    .on('complete', function () {

        file.end();
    })
    .send();
}

function processZipFile(filePath) {

const stats = fs.statSync(filePath)
const fileSizeInBytes = stats.size

if (fileSizeInBytes > 0) {

    var srcPath = filePath;
    var destPath = "./tmp";
    targz.decompress({
        src: srcPath,
        dest: destPath

    }, function (err) {
        if (err) {
            console.log(err);
        } else {
            console.log("Done!");

            UploadFile();
        }

    });
  }
}

function UploadFile() {

var body = fs.createReadStream('./tmp/SampleFile.txt')

var srcfileKey = "SampleFile.txt";
// Upload the stream
var s3obj = new AWS.S3({ params: { Bucket: bucketName, Key: srcfileKey } });
s3obj.upload({ Body: body }, function (err, data) {
    if (err) {
        console.log("An error occurred", err);
    }

    console.log("Uploaded the file at", data.Location);
 })
}
0

1 Answer 1

38

You need to change the file path to just /tmp instead of ./tmp. Lambda only allows you to write to the /tmp directory.

Sign up to request clarification or add additional context in comments.

3 Comments

Would a similar strategy work for Firebase's Cloud Functions? I'm getting the same error when attempting to use fs.writeFile('someName.mp3', response.auioContent, 'binary', err => { if (err) { console.error('ERROR:', err); return; } console.log('Audio content written to file: ' + fileName); });
I am unfamiliar with Firebase's Cloud Functions. Sorry :(
isnt ./tmp up one level and them inside the tmp directory.. if i use /tmp it will say not found.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.