上传
springMvc.xml配置
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8" />
<property name="maxUploadSize" value="1000000000" />
<property name="uploadTempDir" value="upload" />
<property name="maxInMemorySize" value="1000000000" />
</bean>
项目中使用Layui的文件上传功能
//上传文件uploadapk
@RequestMapping("/uploadapk")
@ResponseBody
public Map uploadapk(HttpSession session, MultipartFile file,HttpServletRequest request) {
Map<String,Object> result = new HashMap<String, Object>();
//获取要上传的目标文件夹绝对路径、webapp下
ServletContext context = session.getServletContext();
String realPath = context.getRealPath("/upload/apk");
//重新定义文件名、避免名称重复
//String fileName = UUID.randomUUID().toString().replace("-", "").substring(0, 15) + "_file_" + file.getOriginalFilename();
try {
//上传文件至指定位置
file.transferTo(new File(realPath + "/" + file.getOriginalFilename()));
result.put("code", 0);
result.put("msg", "上传成功");
result.put("filePath", file.getOriginalFilename());
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
form表单提交文件和数据
前端
<!-- 美化input的file -->
<style>
.file {
position: relative;
display: inline-block;
background: #D0EEFF;
border: 1px solid #99D3F5;
border-radius: 4px;
padding: 4px 12px;
overflow: hidden;
color: #1E88C7;
text-decoration: none;
text-indent: 0;
line-height: 20px;}.file input {
position: absolute;
font-size: 100px;
right: 0;
top: 0;
opacity: 0;}.file:hover {
background: #AADFFD;
border-color: #78C3F3;
color: #004974;
text-decoration: none;}
</style>
<form id ="formupload" action="" enctype="multipart/form-data" method="post">
<div class="layui-form-item">
<label class="layui-form-label">描述:</label>
<div class="layui-input-block">
<textarea class="layui-textarea" id="describe1" name="describe1" autocomplete="off" /></textarea>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">上传客户端:</label>
<div class="layui-input-block">
<a href="javascript:;" class="file">选择文件 <input type="file" name="file" id="file"></a> //input file 选择文件
</div>
</div>
</form>
<!-- js -->
var formData = new FormData($("#formupload")[0]);
$.ajax({
url:'<%=request.getContextPath()%>/appset/addvercon'
,type:'post'
,data:formData //必须false才会自动加上正确的Content-Type
,contentType: false
,processData: false //必须false才会避开jQuery对 formdata 的默认处理,XMLHttpRequest会对 formdata 进行正确的处理
,success:function(resObj){
if(resObj==200){
table.reload('listReload',{
url:'<%=request.getContextPath()%>/appset/vercon'
,page:{
curr:1
}
});
layer.msg("添加成功",{icon:1});
window.location.reload();//刷新页面
}else if(resObj==001){
layer.msg("文件已存在",{icon:5});
}else{
layer.msg("添加失败",{icon:5});
}
}
后台
@RequestMapping(value=("/addvercon"),produces="text/html;charset=utf-8")
@ResponseBody
public String addvercon (@RequestParam("file")CommonsMultipartFile file,HttpServletRequest request,VerconEntity v){
try {
boolean flag=true;
String realPath = request.getServletContext().getRealPath("/upload/apk");
File files = new File(realPath);
File[] array = files.listFiles();
for(int i = 0;i<array.length;i++){
if(array[i].isFile()){
if(array[i].getName().equals(file.getOriginalFilename())){
flag=false;
}
}
}
if(flag){ //文件不存在
file.transferTo(new File(realPath + "/" + file.getOriginalFilename())); //保存文件到指定路径
v.setApk_src(request.getContextPath()+"\\upload\\apk\\"+file.getOriginalFilename());
v.setApkname(file.getOriginalFilename());
appSetService.insertvercon(v); //添加记录
}else{ //文件存在
return "001";
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return "0";
}
return "200";
}
下载
使用简单的浏览器访问文件地址进行下载
location.href='<%=request.getContextPath()%>/upload/apk/ksj_web_v0.1.6_2019_05_31_1814.apk';
文件流
@RequestMapping(value = "/doReqdownload")
public void fileDown(HttpServletRequest request,HttpServletResponse response ,String path,String fileName){
//通过文件名找出文件的所在目录
//String path = request.getSession().getServletContext().getRealPath("upload");
ServletOutputStream out;
//得到要下载的文件
File file = new File(path);
try {
//设置响应头,控制浏览器下载该文件
response.setContentType("multipart/form-data");
response.addHeader("Content-Disposition", "attachment;filename="+fileName);
response.addHeader("Content-Length", "" + file.length());
FileInputStream inputStream = new FileInputStream(file);
out = response.getOutputStream();
int b = 0;
byte[] buffer = new byte[1024];
while (b != -1) {
b = inputStream.read(buffer);
//写到输出流(out)中
if(b!=-1)
out.write(buffer, 0, b);
}
inputStream.close();
out.close();//关闭输出流
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
删除
/**
* 删除文件
* @param path 文件路径
* @param filename 删除的文件名
* @return
*/
public static boolean delfile(String path,String filename){
boolean flag=true;
File files = new File(path);
File[] array = files.listFiles();
for(int i = 0;i<array.length;i++){
if(array[i].isFile()){
if(array[i].getName().equals(filename)){
array[i].delete(); //文件存在,删除
flag=false;
}
}
}
return flag;
}