小编Pau*_*l B的帖子

Phoenix - 无效的CSRF(跨站点伪造保护)令牌错误

尝试更新(或创建)记录时,我收到无效的CSRF令牌错误.我正在使用Elixir v1.0.3,Erlang/OTP 17 [erts-6.3]和Phoenix v0.8.0(我想,我不知道如何查看Phoenix的版本).我正在创建一个Web应用程序,主要遵循Phoenix指南和Elixir Dose Jobsite示例资源.但是,当我尝试从html表单发布信息时,我收到无效的CSRF令牌错误.根据错误中给出的建议,我将'x-csrf-token':csrf_token添加到操作中.

edit.html.eex:

<h2>Edit Directory</h2>
<form class="form-horizontal" action="<%= directory_path @conn, :update, @directory.id, 'x-csrf-token': @csrf_token %>" method="post">
  <div class="form-group">
    <label for="directory" class="col-sm-2 control-label">Directory</label>
    <div class="col-sm-10">
      <input type="hidden" name="_method" value="PATCH">
      <input type="text" class="form-control" value="<%= @directory.directory %>" name="directory" placeholder="Directory" required="required">
    </div>
  </div>
...
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

[error] #PID<0.579.0> running Ainur.Endpoint terminated
Server: localhost:4000 (http)
Request: POST /config/directories/2?x-csrf-token=
** (exit) an exception was raised:
    ** (Plug.CSRFProtection.InvalidCSRFTokenError) Invalid CSRF (Cross Site Forgery Protection) token. Make sure that all your non-HEAD and non-GET …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

20
推荐指数
3
解决办法
9352
查看次数

如何在Elixir中读写id3v1和id3v2标签

我想使用Elixir扫描音乐文件和读/写元数据(整个项目是关于学习Elixir - 所以请不要告诉我使用Python!).据我了解,我有两个选择:调用系统实用程序或(因为我知道的Erlang或Elixir中没有库)编写Elixir库.对于m4a文件,我对MP4Box进行系统调用,并将xml文件写入磁盘.然后我读入文件,解析它,并将数据加载到数据库中.

def parse(file_name) do
  System.cmd("MP4Box", ["-diso",file_name])
  Ainur.XmlParser.parse(xml_file_name(file_name))
  |> get_tags
end
Run Code Online (Sandbox Code Playgroud)

非常慢,特别是对于数千个文件.我希望它在每次启动时运行以检查更改/新文件.

现在我正在尝试对带有id3标签的mp3做同样的事情.我在Ubuntu上尝试了libid3-tools,它只找到了id3v1标签.eyeD3只找到了id3v2标签.我的mp3都有,所以我需要确保有相同的(我想我可以删除id3v1标签,但我一直认为遗留设备需要id3v1标签).

音乐元数据是否有任何Erlang或Elixir库?如果没有,系统调用ubuntu实用程序是我的最佳选择(任何建议)?

或者我是否需要编写库以获得合理的性能?如果是这样,是否有一个功能语言的现有库我可以尝试移植?

或者是否可以直接从Elixir调用另一种语言编写的库(没有系统调用)?

erlang mp4 id3 elixir

6
推荐指数
1
解决办法
576
查看次数

在Elixir中搜索文件以获取字节模式的最有效方法

我在歌曲文件中搜索id3标签.一个文件可以有id3v1,id3v1扩展标签(位于文件末尾)以及id3v2标签(通常位于开头).对于id3v1标签,我可以使用File.read(song_file)并拉出最后355个字节(扩展标签为128 + 227).但是,对于id3v2标签,我需要从头开始搜索文件,寻找10字节的id3v2模式.我想避免在搜索不同标签时反复打开和关闭同一文件的任何开销,所以我认为最好的方法是使用File.stream!(song_file)并将文件流发送到不同的函数来搜索不同的标签.

def parse(file_name) do
  file_stream = File.stream!(file_name, [], 1)
  id3v1_tags(file_stream)
  |> add_tags(id3v2_tags(file_stream))
end

def id3v1_tags(file_stream) do
  tags = Tags%{} #struct containing desired tags
  << id3_extended_tag :: binary-size(227), id3_tag :: binary-size(128) >> = Stream.take(file_stream, -355)
  id3_tag = to_string(id3_tag)
  if String.slice(id3_tag,0, 3) == "TAG" do
    Map.put(tags, :title, String.slice(id3_tag, 3, 30))
    Map.put(tags, :track_artist, String.slice(id3_tag, 33, 30))
    ...
  end
  if String.slice(id3_extended_tag, 0, 4) == "TAG+" do
    Map.put(tags, :title, tags.title <> String.slice(id3_extended_tag, 4, 60))
    Map.put(tags, :track_artist, tags.track_artist <> String.slice(id3_extended_tag, 64, 60))
    ...
  end …
Run Code Online (Sandbox Code Playgroud)

id3 elixir

6
推荐指数
1
解决办法
517
查看次数

标签 统计

elixir ×3

id3 ×2

erlang ×1

mp4 ×1

phoenix-framework ×1