这里,我只想总结一下我一下午研究文件上传,上传功能的思考。也许花费了很多时间,但还是觉得比较值的。
以前一直听说过“项目使用的所有应该保存在服务器上,”一直看过这样的代码:Java后端由各种流组成的处理或着文件的方法。当时其实都是朦胧的,似懂非懂的样子。现在或许是有那么的一点理解了:当项目或者具体说页面中存在大量的时,页面的加载可能会很慢,这时,可能就需要使用一个独立的服务器来专门的读取这些了, 所以才有了服务器的说法。(或许是这样)。
上传功能的具体实现(当然文件也一样):
总的来说是这样的, 我们在页面上通过按钮获取到某张后,会显示在页面上(如果你需要的话),显示的可以是本身,或者是的名字。然后通过ajax,把传到了Java后台,(以什么格式我还不清楚),根据我这一下午的实践,MultipartFile ,这个类可以完全接收到前台传过来的数据。,这里也许有人会问, 传到后台干嘛呢。假设你的前端调用的不是你本项目的Java后台代码,而是另外一个接口Api项目的话, 那么,其实,这个APi项目就可以当作一个服务器了。额,这里仅仅是临时保存了而已,就页面而言,如果是表单,你还需要提交表单。那么表单提交时,你还会保存吗?应该是存在服务器上的地址吧。
MultipartFile 通过 MultipartFile transferTo( new File()), 仅需要这步骤,就可以把存到服务器所在的电脑的任意一个盘或者路径里面。 其实这个很简单,难是难在 文件的创建。(坑了我很久),
new File("d:/test1/test2/test3/demopng"), 类似要创建这样的 File文件时, 你要先判断demopng 的父级路径是否存在,如果不存在则要先创建。否则你也许会报一个错误,“javaioFileNotFoundException 拒绝访问”
也许废话说了很多,下面直接上示例代码, 本实例代码亲测有效可用。本实例 前端采用layui + 后端 springMVC+MultipartFile
页面jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>文件上传demo</title>
<%@include file="/comm/mytagsjsp" %>
</head>
<body>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>常规使用:普通
今天在测试同事的微信平台的发送语音的时候,发现有时候语音能发过来,有时候就不行,经过检查,发现丢掉了检测音频时长(微信里面语言时长要限定在60S内),好吧,我补上,闲着也是闲着~
首先是读取语音的时长:
<span style="font-size:14px;"> /// <summary>
/// 获取上传音频的时间长度
/// </summary>
/// <param name="strFullUrl">The STR full URL</param>
/// <returns>SystemString</returns>
/// <remarks>Editor:v-liuhch CreateTime:2015/5/15 17:32:57</remarks>
public string GetLocalVoiceTotalTime(string strFullUrl)
{
ShellClass sh = new ShellClass();
Folder dir = shNameSpace(PathGetDirectoryName(strFullUrl));
FolderItem item = dirParseName(PathGetFileName(strFullUrl));
return dirGetDetailsOf(item, 27); // 获取歌曲时长。
}</span>
使用shellclass的时候要先引用COM组件Microsoft Shell Controls And Automation,并将Embed Interop Type 设为False。
由于上述函数只支持读取本地文件,所以,我们将得到的文件先放在临时文件夹中,判断完成之后立即删除。
<span style="font-size:14px;">/// <summary>
/// 检查上传音频文件的总时间长度是否小于60s
/// </summary>
/// <param name="file">The file</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
/// <remarks>Editor:v-liuhch CreateTime:2015/5/15 17:34:51</remarks>
public bool ChkVideoTotalTime(>
@RequestMapping(value = "/upload", method = RequestMethodPOST)
public ModelAndView onSubmit(>
File source =new File('d:\\testmp3');
Encoder encoder = new Encoder();
MultimediaInfo m = encodergetInfo(source);
long ls = mgetDuration();
duration = ls/1000;
Systemoutprintln("此视频时长为:"+ls/60000+"分"+(ls/1000-ls/6000060)+"秒!");
若用的是springmvc框架上传文件
Multipart>
while(iterhasNext()){
MultipartFile file = multiRequestgetFile(iternext());
String fileOldName = filegetOriginalFilename();
long duration = 0;//音频长度,秒
CommonsMultipartFile cf= (CommonsMultipartFile)file;
DiskFileItem fi = (DiskFileItem)cfgetFileItem();
File source = figetStoreLocation();
Encoder encoder = new Encoder();
MultimediaInfo m = encodergetInfo(source);
long ls = mgetDuration();
duration = ls/1000;}
java中直接使用AudioInputStream类来 *** 作音乐文件,获取时长,实例如下:
import javaioFile;
import javaioIOException;
import javaxsoundsampledAudioInputStream;
import javaxsoundsampledAudioSystem;
import javaxsoundsampledClip;
import javaxsoundsampledLineUnavailableException;
import javaxsoundsampledUnsupportedAudioFileException;
public class AudioLength {
public static void main(String[] args) throws LineUnavailableException,
UnsupportedAudioFileException, IOException {
File file = new File("d:/testwav");
Clip clip = AudioSystemgetClip();
AudioInputStream ais = AudioSystemgetAudioInputStream(file);
clipopen(ais);
Systemoutprintln( clipgetMicrosecondLength() / 1000000D + " s" );//获取音频文件时长
}
}
以上就是关于MultipartFile上传文件数据库保存进了但是target里面没有图片全部的内容,包括:MultipartFile上传文件数据库保存进了但是target里面没有图片、文章怎么测试语音时长、spring mvc怎么获取上传文件的原路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)