java文件上传获取文件大小,文件时长

1.java中获取上传文件的大小,时长

在java中获取上传文件的时长方法多种,在此我用其中的一种,不过需要引入一个jave.jar,此jar在maven仓库总下载不到,我保存到自己的网盘中了,链接: https://pan.baidu.com/s/1eZrV5uHCVS5M7CPpVIVKJQ 提取码: jzfe 。

maven方式获取jar包

<!-- https://mvnrepository.com/artifact/it.sauronsoftware/jave -->
<dependency>
    <groupId>it.sauronsoftware</groupId>
    <artifactId>jave</artifactId>
    <version>1.0.2</version>
</dependency>

获取文件大小用java自带的方法就行

在此用的框架为springMVC
 

package com.baizhi.zcn.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.HashMap;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@RequestMapping("/uploads")
@RestController
public class UploadController {

	private HashMap<String, Object> map = new HashMap<String,Object>();

	//文件上传
	@RequestMapping("fileUpload")
	public HashMap<String,Object> fileUpload(MultipartFile audio,HttpServletRequest request){

		try{
			//获取文件名
			String filename = audio.getOriginalFilename();
			
			//根据相对路径获取绝对路径
			String realPath = request.getSession().getServletContext().getRealPath("/audios");
			
			//判断文件夹是否存在
			File file = new File(realPath);
			if(!file.exists()){
				file.mkdir();
			}
			String sname = new Date().getTime()+"-"+filename;
			
			//获取音频大小    zijie 
			long size = audio.getSize();
			System.out.println("文件大小 :"+size);
			
			//=========1========
			String sizes = size/1024/1024+"MB";
			
			System.out.println("文件大小 :"+sizes);
			//=========2========
			DecimalFormat format = new DecimalFormat("0.00");
			String str = String.valueOf(size);
			Double dd = Double.valueOf(str)/1024/1024;
			String sizess = format.format(dd)+"MB";
			
			System.out.println("文件大小 :"+sizess);
			
			//=========3========
			DecimalFormat df = new DecimalFormat("0.00");
			Double a = Double.valueOf(String.valueOf(size))/1024/1024;
			if(a>1024){
			    a= a/1024;
			    System.out.println("文件大小为:  "+df.format(a)+"GB");
			}else
			System.out.println("文件大小为:  "+df.format(a)+"MB");
			
			//=========4========
			BigDecimal sizez = new BigDecimal(audio.getSize());
			BigDecimal mod = new BigDecimal(1024);
			
			//除两个1024,保留两位小数,进行四舍五入
			BigDecimal setScale = sizez.divide(mod).divide(mod).setScale(2, BigDecimal.ROUND_HALF_UP);
			System.out.println("文件大小为:  "+setScale+"MB");
			
			//文件上传
			audio.transferTo(new File(realPath,sname));
			
			//获取文件时长
            Encoder encoder = new Encoder();
            long length = encoder.getInfo(new File(realPath,sname)).getDuration();
			//输出文件时长
            System.out.println("==length=="+length+"毫秒");
            System.out.println("==length/1000=="+length/1000+"秒");
            System.out.println("==length=="+length/1000/60+"分"+length/1000%60+"秒");
			
			map.put("success", 200);
			map.put("message", "上传成功");
		} catch (Exception e) {
			map.put("success", 400);
			map.put("message", "上传失败");
		}
			return map;
	}	
}

2.如果上边方式获取不了文件时长,可以试试下面的这种方式:

2.1.导入maven依赖

        <!--获得时长需要的jar-->
        <dependency>
            <groupId>org</groupId>
            <artifactId>jaudiotagger</artifactId>
            <version>2.0.3</version>
        </dependency>

2.1.获取文件时长

//获取文件时长   分
AudioFile audioFile = AudioFileIO.read(new File(realPath, filename));
AudioHeader audioHeader = audioFile.getAudioHeader();
int length = audioHeader.getTrackLength();
String duration=length/60+"分"+length%60+"秒";

3.文件下载

    //下载音频
    @RequestMapping("downloadAudio")
    public void downloadAudio(String fileName,HttpServletRequest request,HttpServletResponse response){

        //根据用户名去服务器中的指定位置获取文件
        String realPath = request.getSession().getServletContext().getRealPath("/upload/audios");

        //读取文件输入流
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(new File(realPath, fileName));

            //设置响应的方式   响应头   //attachment;以附件形式下载   inline 在线打开
            response.setHeader("content-disposition","attachment;fileName=" + URLEncoder.encode(fileName,"UTF-8"));

            //下载文件
            IOUtils.copy(fis,response.getOutputStream());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

4.音频在线打开

除了用下载的方式 配置inline 打开音频,已外还可以直接使用<audio>标签直接打开

4.1.可以使用标签的方式直接打开音频

    <%--在线播放音频--%>
    <div id="playAudioDiv" class="modal fade" tabindex="-1" role="dialog">
        <div class="modal-dialog" role="document">
            <audio id="playAudioId" src="" controls></audio>
        </div>
    </div>

4.2.调用方法传入音频路径即可

    function playAudio(url) {
        /*展示音频标签*/
        $("#playAudioDiv").modal("show");
        /*传入音频路径*/
        $("#playAudioId").attr("src", "${path}/upload/audios/" + url);
    }

 

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值