|
1、图片base64上传注意的地方就是传到后台需要截取一部分才能转换为图片,用到ac里的getPicture,后台就需要处理传过来的字符串 前面是格式类型你会发现逗号前面都是多余的,所以截取逗号以后的那一串然后用base64解析成图片。
2、文件的上传,ac都是ajax提交数据,multipart/form-data,我把代码贴一下,希望能帮助一些人。
前端代码很简单:
- api.ajax({
- url: 'http://192.168.18.53:8080/router?method=uploadAmrFile&name=haha&format=json&v=1.0',
- method: 'post',
- timeout: 90,
- dataType: 'json',
- returnAll:false,
- data:{
- files:{file:"文件路径"}
- }
- },function(ret,err){
- });
复制代码 底层架构就不说了,后台代码参考一下吧。
后端接收文件处理代码:(HttpServletRequest)
- public class UploadFileHessian {
- protected Logger log = Logger.getLogger(this.getClass());
- //构造类
- class Position {
- int begin;
- int end;
- public Position(int begin, int end) {
- this.begin = begin;
- this.end = end;
- }
- }
-
- //转换文件
- protected void processRequest(HttpServletRequest request,String path)throws ServletException, IOException {
- //读取请求Body
- byte[] body = readBody(request);
- //取得所有Body内容的字符串表示
- String textBody = new String(body);
- //上传文件名称
- String fileName = getFileName(textBody);
- //取得文件开始与结束位置
- Position p = getFilePosition(request, textBody);
- //输出至文件
- String path1 = writeTo(fileName, body, p,path);
- //String path2 = "E:\\aa\\1395047224460.mp3";
- //changeToMp3(path1, path2);
- }
- //读取文件
- private byte[] readBody(HttpServletRequest request) throws IOException {
- //获取请求文本字节长度
- int formDataLength = request.getContentLength();
- //取得ServletInputStream输入流对象
- DataInputStream dataStream = new DataInputStream(request.getInputStream());
- byte body[] = new byte[formDataLength];
- int totalBytes = 0;
- while (totalBytes < formDataLength) {
- int bytes = dataStream.read(body, totalBytes, formDataLength);
- totalBytes += bytes;
- }
- return body;
- }
- //获取内容位置
- private Position getFilePosition(HttpServletRequest request, String textBody) throws IOException {
- //取得文件区段边界信息
- String contentType = request.getContentType();
- String boundaryText = contentType.substring(contentType.lastIndexOf("=") + 1, contentType.length());
- //取得实际上传文件的起始与结束位置
- int pos = textBody.indexOf("filename=\"");
- //TODO:这里根据返回的报文处理相应的长度 这里只需要获取内容不需要报文在内
- pos = textBody.indexOf("\n", pos) + 1;
- pos = textBody.indexOf("\n", pos) + 1;
- pos = textBody.indexOf("\n", pos) + 1;
- pos = textBody.indexOf("\n", pos) + 1;
-
- int boundaryLoc = textBody.indexOf(boundaryText, pos) - 4;
- int begin = ((textBody.substring(0, pos)).getBytes()).length;
- int end = ((textBody.substring(0, boundaryLoc)).getBytes()).length;
-
- return new Position(begin, end);
- }
- //获取文件名称
- private String getFileName(String requestBody) {
- String fileName = requestBody.substring(requestBody.indexOf("filename=\"") + 10);
- fileName = fileName.substring(0, fileName.indexOf("\n"));
- fileName = fileName.substring(fileName.indexOf("\n") + 1, fileName.indexOf("\""));
- return fileName;
- }
- //保存文件
- private String writeTo(String fileName, byte[] body, Position p,String path) throws IOException {
- FileOutputStream fileOutputStream = new FileOutputStream(path + fileName);
- fileOutputStream.write(body, p.begin, (p.end - p.begin));
- fileOutputStream.flush();
- fileOutputStream.close();
- return path + fileName;
- }
- //转换mp3
- public void changeToMp3(String sourcePath, String targetPath) {
- File source = new File(sourcePath);
- File target = new File(targetPath);
- AudioAttributes audio = new AudioAttributes();
- Encoder encoder = new Encoder();
-
- audio.setCodec("libmp3lame");
- EncodingAttributes attrs = new EncodingAttributes();
- attrs.setFormat("mp3");
- attrs.setAudioAttributes(audio);
- try {
- encoder.encode(source, target, attrs);
- }catch (Exception e) {
- e.printStackTrace();
- }
- }
- //上传语音
- public Object uploadFile(UploadAmrFileRequest request){
- BaseResponse response = new BaseResponse();
- HttpServletRequest req = (HttpServletRequest) request.getRopRequestContext().getRawRequestObject();
- StringBuffer sb = new StringBuffer();
-
- Enumeration<?> en = req.getHeaderNames();
- while (en.hasMoreElements()) {
- String name = (String) en.nextElement();
- String value = req.getHeader(name);
- sb.append(name + "=" + value + "\r\n");
- }
- System.out.println(sb.toString());
-
- ClassPathResource outFile = new ClassPathResource("/");
- String root;
- try {
- root = outFile.getFile().getParent().replace("\\WEB-INF", "").replace("/WEB-INF", "");
- String path = root+"\\upload\\";
- processRequest(req,path);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return response;
- }
- }
复制代码
文件的上传就到此了,能帮助的就看看
|
评分
-
1
查看全部评分
-
|