Golang 建立RESTful webservice 接收客户端POST请求发送wav语音文件 推荐
2014-05-17 21:19
387 查看
首先看下服务器端,服务器端使用martini框架,仅建立一个简单的接收客户端post请求并保存客户端传过来的语音的后台服务:
原文地址:http://liuxp0827.blog.51cto.com/5013343/1412977
原文地址:http://liuxp0827.blog.51cto.com/5013343/1412977
package main //http://liuxp0827.blog.51cto.com/5013343/1412977 import ( "bufio" "github.com/go-martini/martini" "io/ioutil" "log" "net/http" "os" ) func main() { m := martini.Classic() m.Post("/wave", func(req *http.Request) { file, _, err := req.FormFile("file") if err != nil { log.Fatal("FormFile: ", err.Error()) os.Exit(2) } defer func() { if err := file.Close(); err != nil { log.Fatal("Close: ", err.Error()) os.Exit(2) } }() localFile, _ := os.Create("1.wav") defer localFile.Close() writer := bufio.NewWriter(localFile) bytes, err := ioutil.ReadAll(file) if err != nil { log.Fatal("ReadAll: ", err.Error()) os.Exit(2) } writer.Write(bytes) writer.Flush() }) http.ListenAndServe(":8080", m) }再来看下客户端的java代码,首先调用readWavform函数从本地读取语音文件到byte[],然后设置相应的POST头信息,最终发送数据:
import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.Iterator; import java.util.Map; //http://liuxp0827.blog.51cto.com/5013343/1412977 public final class upload { public static void main(String[] args) { Map<String, String> parameters = new HashMap<String, String>(); byte[] data = readWavform("C:\\Users\\PONPON\\Desktop\\test.wav"); doUploadFile("http://localhost:8080/wave", parameters, Constants.FILEPARAM, "11.wav", "multipart/form-data;", data); } public static byte[] readWavform(String filename) { int regLen = 0; byte[] regbuffer = null; try { FileInputStream inputsteam = new FileInputStream(new File(filename)); regLen = inputsteam.available(); regbuffer = new byte[regLen]; if ((regLen = inputsteam.read(regbuffer, 0, regLen)) < 0) { System.out.println("error when read pcm file."); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return regbuffer; } public static String doUploadFile(String reqUrl, Map<String, String> parameters, String fileParamName, String filename, String contentType, byte[] data) { HttpURLConnection urlConn = null; try { urlConn = sendFormdata(reqUrl, parameters, fileParamName, filename, contentType, data); String responseContent = new String(getBytes(urlConn)); return responseContent.trim(); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } finally { if (urlConn != null) { urlConn.disconnect(); } } } private static HttpURLConnection sendFormdata(String reqUrl, Map<String, String> parameters, String fileParamName, String filename, String contentType, byte[] data) { HttpURLConnection urlConn = null; try { URL url = new URL(reqUrl); urlConn = (HttpURLConnection) url.openConnection(); urlConn.setRequestMethod("POST"); urlConn.setConnectTimeout(10000);// (单位:毫秒)jdk urlConn.setReadTimeout(10000);// (单位:毫秒)jdk 1.5换成这个,读操作超时 urlConn.setDoOutput(true); urlConn.setRequestProperty("connection", "keep-alive"); String boundary = "-----------------------------114975832116442893661388290519"; // 分隔符 urlConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); boundary = "--" + boundary; StringBuffer params = new StringBuffer(); if (parameters != null) { for (Iterator<String> iter = parameters.keySet().iterator(); iter .hasNext();) { String name = iter.next(); String value = parameters.get(name); params.append(boundary + "\r\n"); params.append("Content-Disposition: form-data; name=\"" + name + "\"\r\n\r\n"); params.append(value); params.append("\r\n"); } } StringBuilder sb = new StringBuilder(); sb.append(boundary); sb.append("\r\n"); sb.append("Content-Disposition: form-data; name=\"" + fileParamName + "\"; filename=\"" + filename + "\"\r\n"); sb.append("Content-Type: " + contentType + "\r\n\r\n"); byte[] fileDiv = sb.toString().getBytes("UTF-8"); byte[] endData = ("\r\n" + boundary + "--\r\n").getBytes("UTF-8"); byte[] ps = params.toString().getBytes("UTF-8"); OutputStream os = urlConn.getOutputStream(); os.write(ps); os.write(fileDiv); os.write(data); os.write(endData); os.flush(); os.close(); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } return urlConn; } private static byte[] getBytes(HttpURLConnection urlConn) { try { InputStream in = urlConn.getInputStream(); ByteArrayOutputStream os = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; for (int i = 0; (i = in.read(buf)) > 0;) os.write(buf, 0, i); in.close(); return os.toByteArray(); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } } }这只是简单的功能实现,后面可以用martini拓展,写一个简单的web语音识别服务,用android录音后发送POST请求,把语音数据发送到服务器处理识别,再返回json格式的识别结果。
相关文章推荐
- Java客户端通过Http发送POST请求上传文件到web服务器
- Web Service学习笔记(webservice、soap、wsdl、jws详细分析) Webservice的wsdl文件解析与Soap消息的发送、接收(不生成java客户端代码)
- php模拟post向WebService发送内容及接收文件
- Java客户端通过Http发送POST请求上传文件到web服务器
- 前端使用c# winform创建客户端来进行post发送文件,后台使用java来接收
- Webservice的wsdl文件解析与Soap消息的发送、接收(不生成java客户端代码)
- Java客户端通过Http发送POST请求上传文件到web服务器
- 通过http/https的POST方式,发送、处理和接收XML文件内容
- java中使用scoket模拟http post请求发送图片或文件
- asp.net 发送 xml post请求和接收 xml post请求时出现(500) 内部服务器错误的解决办法
- C#中发送HttpPost请求来调用WebService
- java 作为客户端发送http post请求登录网站首页。 HTTP/1.1 302 Found
- java发送url请求进行文件的提交以及后台struts2的action接收处理
- 用eclipse建立简单WebService客户端,使用WSDL,用于短信接口发送
- C#发送HttpPost请求调用WebService
- 如何在WebService接收一个XML文件并解析,客户端如何发送这个XML文件?急求简单代码示例。。
- C#中发送HttpPost请求来调用WebService
- 通过向服务器端发送get请求来让服务器端将其上的文件下载到客户端
- 利用HttpURLConnection发送post请求上传多个文件
- 客户端delphi使用XML与中间层C#.net通信的例子,客户端用idhttp的post发送请求