Nginx服务器的upload上传模块
在Nginx网站的模块列表页中发现一个Nginx服务器的上传模块http://www.grid.net.ru/nginx/upload.en.html
该模块通过Nginx服务器来接受用户上传的文件,在Nginx接受完文件以后再转给后端的程序做处理。
它自动分析客户端的上传请求,将上传的文件保存到 upload_store 所指向的目录位置. 然后这些文件信息将被从原始的请求中剔除,重新组装好上传参数后转到后端由 upload_pass 指定的位置去处理,这样就可以任意处理上传的文件。
每一个上传的 file 字段值将可以由upload_set_form_field 指定的值替换. 文件的内容可以由$upload_tmp_path 变量读到或简单的移到其他位置. 将文件删除由 upload_cleanup 指定控制。
upload_set_form_field可以使用的几个变量
- $upload_field_name
- $upload_content_type
- $upload_file_name
- $upload_tmp_path
原始的文件字段
上传文件的类型
客户端上传的原始文件名称
上传的文件保存在服务端的位置
upload_aggregate_form_field 可以多使用的几个变量,文件接收完毕后生成的
- $upload_file_md5
- $upload_file_md5_uc
- $upload_file_sha1
- $upload_file_sha1_uc
- $upload_file_crc32
- $upload_file_size
文件的MD5校验值
大写字母表示的MD5校验值
文件的SHA1校验值
大写字母表示的SHA1校验值
16进制表示的文件CRC32值
文件大小
官方的设置举例
-
# 上传表单应该提交到这个地址
-
location /upload {
-
# 将请求体转到这个位置
-
upload_pass /test;
-
-
# 将上传的文件保存到这个目录下
-
# 目录是被散列化的,应该存在子目录 0 1 2 3 4 5 6 7 8 9
-
upload_store /tmp 1;
-
-
# 允许上传的文件被用户 user 只读
-
upload_store_access user:r;
-
-
# 设置请求体的字段(添加自己后端处理的信息)
-
upload_set_form_field "${upload_field_name}_name" $upload_file_name;
-
upload_set_form_field "${upload_field_name}_content_type" $upload_content_type;
-
upload_set_form_field "${upload_field_name}_path" $upload_tmp_path;
-
-
# 指示后端关于上传文件的md5值和文件大小
-
upload_aggregate_form_field "${upload_field_name}_md5" $upload_file_md5;
-
upload_aggregate_form_field "${upload_field_name}_size" $upload_file_size;
-
-
# 指示原样转到后端的参数,可以正则表达式表示
-
upload_pass_form_field "^submit$|^description$";
-
}
-
-
# 将请求转到后端的地址处理
-
location /test {
-
proxy_pass http://localhost:8080;
-
}
-
}
将模块添加到Nginx中的方法
下载源代码解压后
为nginx配置额外模块(需要重新编译):
-
tar xvzf nginx_upload_module-2.0.7.tar.gz
-
cd nginx631
-
./configure –add-module=/usr/local/nginx_upload_module-2.0.7
-
make
-
make install
Popularity: 6% [?]
Related
November 25, 2008 | Filed Under LAMP, My Projects, Productivity, WebServer | Comments Off
为HTK添加MP3输入格式支持
HTK作为一个很好的语音分析工具,但是缺少MP3文件作为输入源的支持,在网上找了一些自己需要的语音素材多是MP3格式的,每一个文件都要做WAV格式转化,既耗时间又耗存储空间。
有没有办法直接让HTK直接支持MP3文件的读入呢?经过分析,发现只要对hwav.c中的OpenWavInput函数做修改就可以完成这个想法。
找到关键点,等空闲再研究处理一下。
Popularity: 6% [?]
Related
发现一个CMU音标和KK音标的对照表
在网上发现一个CMU字典音标和KK音标的对照关系
http://blog.urdada.net/2005/07/17/17/
使用Unicode的字符对应KK音标的表示。留下记录以备日后使用。
Popularity: 4% [?]
Related
HTK内存分配处理中的问题
HTK做了自己的内存管理相关函数(hmem.c),并做了一些基础的内存分配函数,在HTK代码中被使用。
一般分配内存采用 Prt New(MemHeap *x, int size);
一般释放数据采用 Dispose(MemHeap *x, Ptr p);
比如创建向量数组ShortVec CreateShortVec(MemHeap *x,int size);等,数组下标从1开始。
创建矩阵Matrix CreateMatrix(MemHeap *x,int nrows,int ncols);等
释放数据 void FreeShortVec(MemHeap *x, ShortVec v); 等
在实际使用中,当MemHeap为不同类型时,使用的规则也不相同。
HTK内部很多地方使用的是 MSTAK 类型的MemHeap,遵循先进后出的方式使用。
-
ShortVec vec0 = CreateShortVec(mem, 20);
-
ShortVec vec1 = CreateShortVec(mem, 40);
-
…
-
FreeShortVec(mem, vec0);
-
FreeShortVec(mem, vec1);
这段代码在运行后会不正常,原因在于vec0,vec1释放的顺序不对,按照先进后出原则vec0是先创建的应该在vec1释放后被释放。修改为下面的代码执行正确。
-
ShortVec vec0 = CreateShortVec(mem, 20);
-
ShortVec vec1 = CreateShortVec(mem, 40);
-
…
-
FreeShortVec(mem, vec1);
-
FreeShortVec(mem, vec0);
Popularity: 4% [?]
Related
为HTK添加wav文件采样速率自动转化功能
用HTK处理声音文件分析很好用,可是有时声音文件是重别的地方拿来的,为了和自己期望使用文件采样率一致,经常要手工做声音文件的频率转化,比较麻烦,有没有办法为htk添加一下功能,让其在读入音频数据的时候自动做目标采样率的转化呢?
分析htk的一些相关代码,发现本想法是可行的。
改动点在 HWav.c 文件中。主要是修改 OpenWavInput 和 ConvertWAVData两个方法的实现。
1. 在OpenWavInput函数中,在给 *sampPeriod 赋值那段代码前,先用一个变量记录 原先的采样率。这样就有了从配置参数中读入的目标采样率可原始文件中读入的采样率了。
2. 为ConvertWavData再添加一个原始采样率的参数,在函数Stero转化后,return前做采样率的比较,如果不一致,则做读入数据的采样率转化
3. 在OpenWavInput函数中使用 ConvertWavData 的地方将前面记录的原始采样率传递进去。
到此,HTK在读入Wav文件时就会自动做采样率的转换了,不用担心拿来的wav文件采样率和期望的不一致而手工在外面对音频文件做预处理式的采样速率转化了。 比如更改代码编译后为HTK设置 源的速率为 625 (16khz) 这样无论实际读入的wav文件是8khz,11khz还是44.1khz,在HTK读入文件后正式处理前都会自动转化为16khz的采样率做处理,免去了自己在外部对声音文件采样率的预处理。
Popularity: 3% [?]
Related
vc2005编译过程中出现 fatal error C1010解决方法
vc2005编译过程中出现 fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “stdafx.h””?
解决办法
在解决方案资源管理器中右击文件,选择属性,配置属性=>c++=>预编译头右侧的“创建/使用预编译头”下拉列表框中选择”不使用预编译头“即可。
Popularity: 3% [?]
Random Posts
VC下编译libMPG123(补)
前次用VC编译了libMPG123库,编译通过,但是没有进行例子程序编译测试。今天测试了一下用libMPG123做MP3到WAV的解码,结果编译器连接错误,提示找不到符号 _strcasecmp 和 _strncasecmp。使用google大法,发现VC没有strcasecmp和strncasecmp函数,只好为他做了一个补丁。
在.h文文件中添加如下声明:
#ifdef _MSC_VER
int strcasecmp(char *s1, char *s2);
int strncasecmp(char *s1, char *s2, register int n);
#endif
在.c文件中添加如下实现
#ifdef _MSC_VER int strcasecmp(char *s1, char *s2) { while (toupper((unsigned char)*s1) == toupper((unsigned char)*s2++)) if (*s1++ == '') return 0; return(toupper((unsigned char)*s1) - toupper((unsigned char)*--s2)); } int strncasecmp(char *s1, char *s2, register int n) { while (--n >= 0 && toupper((unsigned char)*s1) == toupper((unsigned char)*s2++)) if (*s1++ == '') return 0; return(n < 0 ? 0 : toupper((unsigned char)*s1) - toupper((unsigned char)*--s2)); } #endif
编译连接通过。
Popularity: 3% [?]
Related
用VC编译libMPG123库
首先从http://mpg123.org/ 下载最新的源码包,解压后得到如下目录结构
将src/libmpg123目录下的全部文件拷贝到ports/MSVC++/libMPG123目录下。
打开VS装入libMPG123.vcproj工程文件,按 “生成” 按钮,编译提示 mpg123.h, config.h 文件找不到。查找原始的src文件目录下确实没有这两个文件,但是有mpg123.h.in, config.h.in 两个文件,用记事本打开查看就是c的代码文件,于是将他们拷贝过来后然后去掉后面的 .in 扩展名,编辑 mpg123.h 将前面的
@INCLUDE_STDLIB_H@
@INCLUDE_SYS_TYPE_H@
两行替换为
#include <stdlib.h>
#include <sys/types.h>
再进行编译,提示
libmpg123\mpg123.h(732) : error C2081: “ssize_t”: 形参表中的名称非法
网上搜了一把原来是 VC 中没有ssize_t这个类型定义,于是按照config.h最后面的提示在mpg123.h 中添加如下一个类型定义
#ifdef _MSC_VER
typedef long ssize_t;
#endif
再次编译,还是提示出错,主要是在 mpg123lib_intern.h中提示有一些引入的 .h 文件找不到,找到相对应的错误行可以看到是由一个 #ifdef 定义的开关来做引入库定义的,通过查找发现这些名称是在 config.h 中定义的,记下名称,到config.h 中将对应该名称的 #define 语句注释掉。
再次重新编译,还是失败,分析发现是由于一个ALIGNED(16) 的宏造成的。通过在工程中查找ALIGNED,发现
他是在 config.h 文件中通过
#define CCALIGN 1
来控制使用ALIGNED的,可以将其注释掉,或者在optimize.h中将ALIGNED(a)的宏定义由
#ifdef CCALIGN
#define ALIGNED(a) __attribute__((aligned(a)))
#else
#define ALIGNED(a)
#endif
修改为
#ifdef CCALIGN
#ifdef _MSC_VER
#define ALIGNED(a) __declspec(align(a))
#else
#define ALIGNED(a) __attribute__((aligned(a)))
#endif
#else
#define ALIGNED(a)
#endif
再重新编译,没有新的error 出来,编译通过。
编译工作到此结束,以后就可以通过VC来试验用libMPG123来进行mp3解码了。
附:网上一篇文章,gcc和VC编译器的一些差异
http://www.mathmagic.cn/bbs/read.php?tid=7145
Popularity: 4% [?]