簡體   English   中英

使用riak-erlang-client從riak到氮氣存儲和檢索照片文件

[英]Storing and retrieving photo files from riak through nitrogen using riak-erlang-client

我正在運行由5個節點組成的riak群集,我通過協議緩沖區客戶端riak-erlang-client連接到該節點。 如我在此stackoverflow鏈接中建議的那樣,我將riak-erlang-client安裝為氮氣插件 我知道如何通過氮氣網絡框架上傳文件,然后嘗試將它們存儲在riak數據庫中,以后再檢索它們。

我看過Basho資源中顯示的這一亮點

curl -XPUT http://localhost:10018/buckets/images/keys/<image_name>.jpg -H 'Content-Type: image/jpeg' --data-binary @<image_name>.jpg

但這根本不能滿足我的需求,因為它甚至沒有使用我正在使用的客戶端!

我曾經使用過Erlang / OTP文件庫從氮氣的./scratch目錄中讀取照片文件,以便將照片文件保存為riak數據庫中的二進制流,但是我無法將其檢索到氮氣驅動的Web應用程序中。

歡迎任何幫助。

首先使用rebar將riak-erlang-client作為插件添加到Nitrogen。 在您的項目的rebar.config中添加如下所示的依賴項。 Basho資源

{deps, [
    {riakc, "1.4.1",
      {git, "git://github.com/basho/riak-erlang-client", 
         {tag, "1.4.1"}}}
   ]}.

然后在您的應用程序中運行make

cd ../../myapp
make

使用例如此氮氣上載示例上載文件。 如果在此處找到源代碼。

在finish_upload_event部分中,將臨時文件中的LocalFileName文件路徑捕獲。 使用文件路徑讀取文件。

event(_) -> ok.

start_upload_event(Tag) ->
    wf:flash(wf:f("Upload started with tag (~p)", [Tag])).

finish_upload_event(_Tag, undefined, _, _) -> 
   wf:flash("Please select a file."), ok;

finish_upload_event(_Tag, _FileName, LocalFileName, _Node) ->
   {ok, Binary_image} = file:read_file(LocalFileName),

   %% Open a connection to the Riak database
   {ok, Pid} = riakc_pb_socket:start(DBNode,PORT,{connect_timeout,TIMEOUT},auto_reconnect, false}])).

   %% If the bucket where you save your images is called my_images, create the riak object
   Obj = riakc_obj:new(term_to_binary(my_images),term_to_binary(My_key),Binary_image),

   %% Save to the database
   ok = riakc_pb_socket:put(Pid, Obj,[]).

從數據庫讀取圖像並將其顯示在Web瀏覽器中

-module(image).
-include_lib("nitrogen_core/include/wf.hrl").
-compile(export_all).   

main() -> 
   %% Set the content-type of the image
   wf:content_type("image/png"),
   {ok, Pid} = riakc_pb_socket:start(DBNode,PORT,{connect_timeout,TIMEOUT},auto_reconnect, false}])).

   %% Read the image data from the database
   {ok, Fetched} = riakc_pb_socket:get(Pid,     term_to_binary(my_images),term_to_binary(My_key),[]),

   %% Record the image record
   Binary_image = binary_to_term(riakc_obj:get_value(Fetched)),
   Binary_image.        

event(_) -> ok. 

在瀏覽器結構中,您指向圖像文件的URL,例如http://example.com/image

其中image是呈現圖像文件的模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM