2013-12-11 71 views
1

我正在尋找將WebM文件存儲到Redis中的解決方案。在Redis中存儲WebM文件(NodeJS)

讓我們說明情況:

  • 的服務器的NodeJS接收來自客戶端的WebM文件,並保存到服務器文件系統。
  • 然後它必須在redis中保存這個文件,因爲我不想管理redis和文件系統。這樣我就可以用redis命令刪除視頻。

我想讀取與fs.readFile)文件(然後將它保存到緩衝區中,但我不知道巫編碼格式的使用,我不知道如何引用這一過程中給予在發出請求時將WebM視頻回送給客戶端。

這是繼續進行的好方法嗎?任何建議? PS:我使用強大的上傳文件。


編輯:我找到了一種方法來進行,但那裏有另一個問題:

var file = fs.readFileSync("./video.webm"); 
client.set("video1", file1, function(){ 
    client.get("video1", function(err, data) { 
     var buffer = new Buffer(data, 'binary'); 
     // file ≠ buffer 
    }); 
}); 

這是一個編碼的問題?像unicode/UTF8/ASCII? 也許node和redis使用不同的編碼?

+0

在redis上存儲視頻文件是個好主意嗎?我不這麼認爲。您可以改爲在MongoDB上查看GridFS。 – Munim

+0

我正在爲一個大學項目做這件事,他們說這樣做更好......我認爲這不是一個好主意。 – RikyTres

回答

0

我對NodeJS和WebM文件瞭解不多。

Redis在8位字符串中存儲C字符類型,所以它應該是二進制友好的。檢查js代碼和配置,以確保您的js redis客戶端以bytearray方式發送/接收數據,而不是以UTF-8字符串的形式發送/接收數據,這可能會導致數據JS的轉換錯誤。

+0

我在[另一個問題](http://stackoverflow.com/questions/8963372/how-to-save-and-retrieve-string-with-accents-in-redis)中讀到'Redis服務器本身存儲所有數據作爲一個二進制對象「,然後我不知道該怎麼想現在... 這是所有二進制或全部字符串? :O – RikyTres

+0

似乎你是對的。它實際上是類似C的8位字符串,所以它是二進制安全的。它必須是您的js客戶端必須配置爲發送bytearray而不是UTF-8字符串的問題:js應該是問題。我將添加一個編輯。 – zenbeni

+0

客戶端不會發送任何內容......服務器使用fs.readFileSync()從文件系統讀取文件,並返回帶有二進制內容的緩衝區。該緩衝區的Console.log返回如下所示:''然後我認爲這個Buffer對象是二進制解碼,而不是utf-8解碼......對吧? – RikyTres

1

找到解決方案! 當您創建客戶端對象時,問題就變成了。

通常這是什麼做

var client = redis.createClient(); 

而且return_buffers PARAM將被設置爲假。

這樣

var client = redis.createClient(6379, '127.0.0.1', { 
    return_buffers: true, 
    auth_pass: null 
}); 

一切了吧! ;)

這是the issue page他們幫我