1

新しい質問

ブロブを上書きしてから更新すると、ブラウザは新しい画像ではなくメインの画像をキャッシュしています。キャッシュ制御プロパティがあることを読みましたが、実装できません。アップロードしたばかりの BLOB キャッシュを消去する必要がある

古い質問

connect-busboy ミドルウェアと次の方法を使用して既存の blob を上書きしようとしていますが、ファイルが上書きされず、理由がわかりません。

createBlockBlobFromStream(container, blob, (Stream), streamLength,
options, callback) → {SpeedSummary}

ストリームからブロック BLOB をアップロードします。サービスに BLOB が既に存在する場合は、上書きされます。

app.post('/upload', function(req, res, params) {
    var name;
    req.busboy.on('field', function (fieldname, val) {
      name = val+'.jpg';
    });

 req.busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
      file.on('data', function (data) {
        console.log(name);
         console.log(data);
        var bufferStream = new stream.PassThrough();
          bufferStream.end(data);
                var blobSvc = azure.createBlobService(accountName, accountKey);
          blobSvc.createBlockBlobFromStream('images', name, bufferStream, data.length, function (error, result, response){
              if (!error) {
                  res.send(200,'upload succeeded')
              } else {
                  res.send(500,JSON.stringify(error))
              }
          })
      });
    });
});
4

1 に答える 1

0

Azure Storage SDK for Node API Referenceごとに、

createBlockBlobFromStream(container, blob, (Stream), streamLength, options, callback) → {SpeedSummary}

ストリームからブロック BLOB をアップロードします。BLOB がサービスに既に存在する場合は、上書きされます。ブロブが存在する場合に上書きを回避し、代わりにエラーをスローするには、オプション オブジェクトで accessConditions パラメータを渡してください。

したがって、既存の BLOB ファイルを Azure Storage SDK for Node で上書きするのは正しいことです。

編集:

アップロードの問題が発生したようです。BLOB を Azure ストレージにアップロードする代わりに、createWriteStreamToBlockBlobを使用することをお勧めします。createBlockBlobFromStream次の例は、connect-busboyミドルウェアを使用して機能します。/public フォルダーを作成します。次のフォルダー構造を使用します。

\index.js

\public\index.html

INDEX.JS

var express = require('express')
var app = express()
var busboy = require('connect-busboy')
var azure = require('azure-storage')

var accountName = "<acountName>"
var accountKey = "<accountKey>"

app.use(busboy())
app.use(express.static('public'))

app.get('/', function(req, res) {
  res.sendFile('index.html')
})

app.post('/upload', function(req, res, params) {
  req.pipe(req.busboy);

  req.busboy.on('file', function(fieldname, file, filename) {
    var blobSvc = azure.createBlobService(accountName, accountKey)
    file.pipe(blobSvc.createWriteStreamToBlockBlob('mycontainer', filename, function(error) {
      if (!error) {
        res.send(200, 'upload succeeded')
      } else {
        res.send(500, JSON.stringify(error))
      }
    }))

  })
})

app.listen(process.env.PORT || 3000, function() {
  console.log('Example app listening on port 3000!')
})

INDEX.HTML

<!DOCTYPE html>
<html>
<head>
    <title>Sample</title>
</head>

<body>
    <form action="/upload" method="post" enctype="multipart/form-data">
        Select image to upload:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" value="Upload Image" name="submit">
    </form>
</body>
</html>
于 2016-12-30T02:58:23.523 に答える