日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

录音文件上传且amr格式转mp3格式

發布時間:2024/1/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 录音文件上传且amr格式转mp3格式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.錄音文件

前臺測試代碼:

<form id="upload" enctype="multipart/form-data" method="post"><input type="file" name="file" id="pic"/><input type="button" value="提交" onclick="uploadPic();"/><span class="showUrl"></span><img src="" class="showPic" alt=""></form> function uploadPic() {var form = document.getElementById('upload'),formData = new FormData(form);$.ajax({url:"http://localhost:8080/api/uploadVoiceFile",type:"post",data:formData,processData:false,contentType:false,success:function(res){if(res){alert(res+"上傳成功!");}console.log(res);$("#pic").val("");$(".showUrl").html(res);$(".showPic").attr("src",res);},error:function(err){alert("網絡連接失敗,稍后重試",err);}})}

后臺接收文件代碼:

發現問題1:

SpringBoot下測試時,發現的該問題,即在解析請求時List list = upload.parseRequest(request);得到的list size=0,也就是根本沒有得到文件數據。我在網上搜索該問題的解決方法,大致有以下兩種:
(1)原因在于Spring的配置文件中已經配置了MultipartResolver,導致文件上傳請求已經被預處理過了,所以此處解析文件列表為空,對應的做法是刪除該段配置。
(2)認為是structs的過濾器導致請求已被預處理,所以也要修改對應過濾器的配置。
然而,在SpringBoot下,上述兩種解決方法不可能做到,因為SpringBoot的相關配置都是自己完成的,根本沒有顯示的配置文件。況且以上兩種解決方法,修改配置文件可能影響整個工程的其他部分,所以得另尋方案。
我通過斷點調試該Controller代碼,發現傳入的參數HttpServletRequest實例已經為StandardMultipartHttpServletRequest 對象了,且其結構中包含整個form表單的所有字段信息,我就想,區別于網上已有的兩種解決方案,總是想避免這種預處理,何不就利用這種預處理,來簡化自己的代碼結構呢?于是就有了下面的解決代碼。其方法很簡單,就是對傳入的request做強制轉型,從而可以根據StandardMultipartHttpServletRequest 實例方法得到相關form表單數據 。

/*** 上傳文件(從request中獲取inputstream)* @param request* @param response* @return* @throws ServletException* @throws IOException*/@ResponseBody@PostMapping("/uploadVoiceFile")public void uploadVoiceFile(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {logger.info("進入上傳文件uploadVoiceFile方法");try{boolean isMultipart = ServletFileUpload.isMultipartContent(request);String realpath =request.getContextPath()+"/audio/";String fileName = ""+System.currentTimeMillis();if (isMultipart) {File dir = new File(realpath);if (!dir.exists()){dir.mkdirs();}StandardMultipartHttpServletRequest req = (StandardMultipartHttpServletRequest) request;Iterator<String> iterator = req.getFileNames();while (iterator.hasNext()) {MultipartFile file = req.getFile(iterator.next());InputStream sis = file.getInputStream();//存儲文件logger.info("創建音頻文件"+request.getContextPath()+fileName+".amr");FileOutputStream fos = new FileOutputStream(request.getContextPath()+"/audio/"+fileName+".amr");logger.info("開始寫音頻文件");fos.write(file.getBytes()); // 開始寫音頻文件fos.flush();fos.close();String sourceDir = request.getContextPath()+"/audio/"+fileName+".amr";String targetDir = request.getContextPath()+"/audio/"+fileName+".mp3";changeToMp3(sourceDir, targetDir);response.getWriter().append(fileName);logger.info("文件地址"+request.getContextPath()+"/audio/"+fileName+".amr");}}else{response.getWriter().append("file not find error");}}catch (Exception e) {e.printStackTrace();logger.info(e.getMessage());logger.info(e.getStackTrace().toString());}logger.info("退出上傳文件uploadVoiceFile方法");}

?發現問題2:

項目需要將 amr 格式的文件轉成 mp3格式,網絡上提供的思路大多是使用jave-x-x.jar。
這個包確實有用,因為開發時是在windows環境中,測試轉換雖然報了異常:

it.sauronsoftware.jave.EncoderException: Duration: N/A, bitrate: N/A

但也確實轉換成功了,可以播放。
可是一旦部署到Linux環境當中,不是轉換失敗,就是轉換的文件為大小 0 k。

?

public static void changeToMp3(String sourceDir,String targetDir) throws InputFormatException {File source = new File(sourceDir); // 源文件File target = new File(targetDir); // 目標文件AudioAttributes audio = new AudioAttributes();audio.setCodec("libmp3lame");audio.setBitRate(new Integer(128000));audio.setChannels(new Integer(2));audio.setSamplingRate(new Integer(44100));EncodingAttributes attrs = new EncodingAttributes();attrs.setFormat("mp3");attrs.setAudioAttributes(audio);attrs.setDuration(30.0f);attrs.setOffset(0f);Encoder encoder = new Encoder();try {encoder.encode(source, target, attrs);} catch (IllegalArgumentException | EncoderException e) {e.printStackTrace();}}

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的录音文件上传且amr格式转mp3格式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。