将文件上传到 azure blob 服务时出错

问题描述 投票:0回答:1

我目前使用 Node js 创建一个上传按钮,该按钮将接收一个文件,将其名称存储在数据库中,并将实际文件存储在 azure blob 存储中。 到目前为止,我正在努力将 extra_docs 上传到 blob 存储,但由于某种原因,我不断收到此错误,指出 createReadStream 不是函数请记住,我删除了可读流,只是尝试将 fileObject.data 属性存储在包含缓冲的十六进制的流变量中,并使用 .uploadData 函数,它还说这不是一个函数

(node:20716) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
Server is running on port 8080
Connected to Azure SQL Database
Blob: Test pdf.pdf
[Object: null prototype] {
  additionalDocFile: {
    name: 'Test pdf.pdf',
    data: <Buffer 25 50 44 46 2d 31 2e 37 0d 0a 25 b5 b5 b5 b5 0d 0a 31 20 30 20 6f 62 6a 0d 0a 3c 3c 2f 54 79 70 65 2f 43 61 74 61 6c 6f 67 2f 50 61 67 65 73 20 32 20 ... 32052 more bytes>,
    size: 32102,
    encoding: '7bit',
    tempFilePath: '',
    truncated: false,
    mimetype: 'application/pdf',
    md5: '24ce60079f1b75543103a67560bdcfbb',
    mv: [Function: mv]
  }
}
C:\Users\sflwc9cw\Agency%20Management%20System\api\controllers\upload_controller.js:12
    const stream = fileObject.data.createReadStream();
                                   ^

TypeError: fileObject.data.createReadStream is not a function
    at uploadToBlobStorage (C:\Users\sflwc9cw\Agency%20Management%20System\api\controllers\upload_controller.js:12:36)
    at postDocs (C:\Users\sflwc9cw\Agency%20Management%20System\api\controllers\upload_controller.js:41:5)
    at Layer.handle [as handle_request] (C:\Users\sflwc9cw\Agency%20Management%20System\api\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\sflwc9cw\Agency%20Management%20System\api\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\sflwc9cw\Agency%20Management%20System\api\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\sflwc9cw\Agency%20Management%20System\api\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\sflwc9cw\Agency%20Management%20System\api\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\sflwc9cw\Agency%20Management%20System\api\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\sflwc9cw\Agency%20Management%20System\api\node_modules\express\lib\router\index.js:275:10)
    at Function.handle (C:\Users\sflwc9cw\Agency%20Management%20System\api\node_modules\express\lib\router\index.js:174:3)

const db = require('../config/db.js');
const { BlobServiceClient } = require('@azure/storage-blob');
const { connectionString } = require('../config/blobconfig.js');

const blobServiceClient = BlobServiceClient.fromConnectionString(connectionString);

const containerClient = blobServiceClient.getContainerClient('pdf-files');

async function uploadToBlobStorage(fileObject, fileName){ 
    const blockBlobClient = containerClient.getBlobClient(fileName)
    const stream = fileObject.data.createReadStream();
    
    try {
        await blockBlobClient.uploadStream(stream);
        console.log(`Blob "${fileName}" uploaded successfully.`);
    } catch (error) {
        console.error(`Error uploading blob "${fileName}":`, error);
        throw error; // Re-throw the error to be caught by the caller
    }
}

const postDocs = (req, res) => { 

    // Check if files were uploaded
    if (!req.files || Object.keys(req.files).length === 0) {
        return res.status(400).send('No files were uploaded.');
    }
    console.log(req.files);
    const additionalDocFileObject = req.files.additionalDocFile; 
    

    // Extract data from request
    const uwActionIdName = req.body.uwActionId;
    const additionalDocFileName = req.files.additionalDocFile.name ? req.files.additionalDocFile.name : null; 
    const endorsementsDocFileName = req.files.endorsementsDocFile?.name ? req.files.endorsementsDocFile.name : null;
    const proofOfHomeOwnershipFileName = req.files.proofOfHomeOwnershipFile?.name ? req.files.proofOfHomeOwnershipFile.name : null;
    const driversLicenseFileName = req.files.driversLicenseFile?.name ? req.files.driversLicenseFile.name : null;
    const flDlCheckFileName = req.files.flDlCheckFile?.name ? req.files.flDlCheckFile.name : null;
    //console.log();
    uploadToBlobStorage(additionalDocFileObject, additionalDocFileName);
    // Execute SQL queries to insert data into the database
    const query = `
    BEGIN TRANSACTION;

UPDATE uw_action_documents
SET
    additional_documents = COALESCE(additional_documents, @additionalDocFileName),
    endorsements = COALESCE(endorsements, @endorsementsDocFileName),
    proof_of_home_ownership = COALESCE(proof_of_home_ownership, @proofOfHomeOwnershipFileName),
    drivers_license = COALESCE(drivers_license, @driversLicenseFileName),
    fl_dl_check = COALESCE(fl_dl_check, @flDlCheckFileName)
WHERE uw_action_id = @uwActionId;

IF @@ROWCOUNT = 0
BEGIN
    INSERT INTO uw_action_documents (uw_action_id, additional_documents, endorsements, proof_of_home_ownership, drivers_license, fl_dl_check)
    VALUES (@uwActionId, @additionalDocFileName, @endorsementsDocFileName, @proofOfHomeOwnershipFileName, @driversLicenseFileName, @flDlCheckFileName);
END

COMMIT TRANSACTION;

    
    
    
    `;
    const request = new db.Request();
    request.input('uwActionId', db.Int, uwActionIdName);
    request.input('additionalDocFileName', db.NVarChar, additionalDocFileName);
    request.input('endorsementsDocFileName', db.NVarChar, endorsementsDocFileName);
    request.input('proofOfHomeOwnershipFileName', db.NVarChar, proofOfHomeOwnershipFileName);
    request.input('driversLicenseFileName', db.NVarChar, driversLicenseFileName);
    request.input('flDlCheckFileName', db.NVarChar, flDlCheckFileName);

    request.query(query, (err, result) => {
        if (err) {
            console.error(err);
            return res.status(500).send('Failed to store files in the database');
        }
        
        console.log('Files stored successfully in the database');
        res.status(200).send('Files stored successfully');
    });
};

module.exports = {
    postDocs
};



node.js azure express azure-blob-storage
1个回答
0
投票

我发现我将 getBlobClient 更改为 getBlockBlobClient :

   const blockBlobClient = containerClient.getBlockBlobClient(fileName);
    const stream = fileObject;
    console.log(stream)
    try {
       await blockBlobClient.uploadData(stream);
        console.log(`Blob "${fileName}" uploaded successfully.`);
    } catch (error) {
        console.error(`Error uploading blob "${fileName}":`, error);
        throw error; // Re-throw the error to be caught by the caller
    }```
© www.soinside.com 2019 - 2024. All rights reserved.