import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.util.UUID;
import javax.activation.MimetypesFileTypeMap;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Repository;
import org.springframework.web.multipart.MultipartFile;
/**
* @author TANGSHUAI
* @date 2020年8月25日 下午4:42:09
* @文件工具类
*/
@Repository
public class FilesUploadDownload {
/**
* 文件上传
*
* @param file
* @param filePath
* @return
*/
public String getFilesUpload(MultipartFile file, String filePath) {
String fileName2 = null;
try {
// 判断文件是否为空
if (null != file) {
// 获取文件名称
String fileName = file.getOriginalFilename();
// 使用UUID保证文件唯一性
String uuid = UUID.randomUUID().toString();
// 截取文件后缀名
int lastIndexOf = fileName.lastIndexOf(".");
String suffixname = fileName.substring(lastIndexOf, fileName.length());
// 拼接名称
fileName2 = uuid + suffixname;
// 设置文件上传路径
// String filePath = "C:/Pictureserver/";
//
String path = filePath + fileName2;
File dest = new File(path);
// 检测目录是否存在,没有则新建一个
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
// 写入文件
file.transferTo(dest);
}
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return fileName2;
}
/**
* 文件下载
*
* @param response
* @param filename
* @param filePath
* @throws IOException
*/
public void getFilesDownload(HttpServletResponse response, String filename, String filePath) throws IOException {
File file = new File(filePath + filename);
if (file.exists()) {
// 设置content-type,即告诉客户端所发送的数据属于什么类型,设置信息给客户端不解析
response.setHeader("Content-type", new MimetypesFileTypeMap().getContentType(filename));
// 设置扩展头,当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode((String) filename, "UTF-8"));
OutputStream outputStream = response.getOutputStream();
byte[] buff = new byte[1024];
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
int i = bis.read(buff);
while (i != -1) {
outputStream.write(buff, 0, buff.length);
outputStream.flush();
i = bis.read(buff);
}
// 关闭流
bis.close();
outputStream.close();
}
}
/**
* 文件复制
*
* @param source
* @param dest
* @throws IOException
*/
public void copyFileUsingJava7Files(File source, File dest) throws IOException {
Files.copy(source.toPath(), dest.toPath());
}
/**
* 删除文件
* @param fileName
* @return
*/
public boolean deleteFile(String fileName) {
File file=new File(fileName);
// 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
if(file.exists() && file.isFile()) {
if(file.delete()) {
//删除成功返回true
return true;
}
}
return false;
}
}
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:刘畅 * 完成日期:2014 年 12 月 14 日 * 版 本 号:v1.0 * * 问题描述:用函数指针调用函数; * 输入描述:输入命令; * 程序输出:输出要求输出的。 #include u
YOLOV5检测代码detect.py注释与解析
效果图:代码:#include "dia_settings.h"#include <QStandardPaths>#include <QProcess>dia_settings::dia_settings(QWidget *parent) : QDialog(parent){ ui.setupUi(this); //查看注册表是否已经写入程序...
网络前端面试题总结HTML + CSS 理论知识1,讲讲输入完网址按下回车,到看到网页这个过程中发生了什么 一个。域名解析 湾 发起TCP的3次握手 C。建立TCP连接后发起HTTP请求 d。服务器端响应HTTP请求,浏览器得到的html代码 即 浏览器解析HTML代码,并请求HTML代码中的资源 F。浏览器对页面进行渲染呈现给用户 2,谈谈你对...
android里makefile的写法(1)Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件,宏函数’my-dir’, 由编译系统提供。由于一般情况下Android.mk和需要编译的源文件在同一目录下,所以定义成如下形式:LOCAL_PATH:=$(call my-dir)上面的语句的意思是 将LOCAL_PATH变量定义成 本文件所在 目录路径。一
转自某位群友https://github.com/PetricHwang/coding-interview-university/blob/master/translations/README-cn.md 以下是他的内容,不代表我的观点,仅此转发了解interview-resources-zhCN本来想跳槽,搜了些互联网公司的面试题,发现自己理解都不是很深刻,默默地回去把简历关掉,潜心学...
Linux严格区分大小写。一、CentOS 64位安装后基本配置命令rm -fr /* #删根init 0 #关机init 6 #重启setup #负责配置防火墙的开关getenforce #查看当前seLinux配置情况gedit /etc/seLinux/config #利用gedit图形编辑器修改seLinux配置管理(将Enforcing改为disable...
为啥要养号:1、提高账号得权重,保证发个视频系统会推荐(成为热门得质量高,或者找个工作室给你点赞关注)。2、让抖音短视频平台觉得你是一个正常的号码,评论成为热评的概率高。养号的步骤:1、每天稳定登陆持续一周。2、刷首页推荐、刷同城推荐、看直播总计时间30分钟就好。3、翻一翻抖音的热搜榜单、挑战。4、关注几个自己喜欢的账号。(偶尔看一下推荐)5、无论是首页、推荐、同城、直播均需要点赞和评论切记要看完后点赞评论。养号七宗罪:1、来回切换手机,或者在同一个手机上多个抖音号。
本文转自 http://blog.csdn.net/jiangwei0910410003/article/details/42640665 稍有修改,感谢分享!考虑到篇幅和内容相关性,将其分为两篇文章,这里主要记录自定义View的具体使用 接上文 Android自定义View—前奏篇(Paint和Canvas的使用)自定义View的流程为:创建一个继承自View的自定义类 当然也可以继承自任
今天的博文将介绍Visual Studio中的一些实用调试技巧。这是受我朋友Scott Cate (他发表过几十篇很棒的VS技术文章) 启发。他最近告诉我,许多Visual Studio下的程序员,甚至一些很有经验的开发人员,都不知道这些技巧。希望这篇文章能帮你掌握这些技巧。它们都很简单,却能帮你节约大量的时间。 跳到当前光标处(Ctrl+F10) 我经常看到人们为了到达目标代
ERROR on proc 0: Neighbor list overflow, boost neigh_modify one or page出现这个错误的直接原因是体系中某些原子的近邻数超过了2000个(除非你使用neigh_modify命令增加了允许的近邻数),而导致这个错误的可能因素有:初始结构有问题,比如原子分布过于密集。这种情况在一开始就会出错。截断半径设置的太大了,比如大于10A。可以通过命令neighbor,减小截断半径来解决。势参数设置有问题,这种情况一般是在运行一些步后才会出错。