用于存储文件信息的表名
CREATE TABLE `visit_file` (
`id` varchar(32) COLLATE utf8_bin NOT NULL,
`visit_id` varchar(32) COLLATE utf8_bin NOT NULL,
`file_name` varchar(200) COLLATE utf8_bin NOT NULL,
`file_new_name` varchar(200) COLLATE utf8_bin NOT NULL,
`save_path` varchar(200) COLLATE utf8_bin NOT NULL,
`file_suffix` varchar(10) COLLATE utf8_bin NOT NULL,
`file_size` varchar(200) COLLATE utf8_bin NOT NULL,
`fcd` date NOT NULL,
`fcu` varchar(10) COLLATE utf8_bin NOT NULL,
`lcd` date NOT NULL,
`lcu` varchar(10) COLLATE utf8_bin NOT NULL,
`is_del` varchar(2) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
开发环境实在idea中,使用的技术是 springBoot
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author WANGLAIKUAN
*/
@Component
@ConfigurationProperties(prefix = "sales.files")
@Data
public class FileProperties {
private String imageBasePath;
private String uploadPath;
private String uploadNewPath;
}
上传图片封装的方法
public void imageUpload(MultipartFile multipartFile, VisitFile visitFile){
List
list.add("gif");
list.add("jpg");
list.add("jpeg");
list.add("png");
// 1.源图片上传大小
long size = multipartFile.getSize();
visitFile.setFileSize(size+"");
// 2.获取文件上传的文件名
String fileName = multipartFile.getOriginalFilename();
visitFile.setFileName(fileName);
// 3.获取源图片上传类型FilenameUtils(工具类).getExtension(文件名)
String fileSuffix = FilenameUtils.getExtension(fileName);
// 4.判断图片上传类型是不是PDF格式
if(!list.contains(fileSuffix)){
log.error("图片上传格式错误!图片格式为: "+fileSuffix);
return;
}
visitFile.setFileSuffix(fileSuffix);
// 5.生成新的上传图片名
String fileNewName=System.currentTimeMillis()+fileName.substring(fileName.lastIndexOf("."));
// String fileNewName=System.currentTimeMillis()+fileSuffix;
// 6.生成新的图片上传名,数字加后缀
visitFile.setFileNewName(fileNewName);
// 7,生成服务器上上传的新的图片名称
fileName=fileName.substring(0,fileName.lastIndexOf("."))+"_"+fileNewName;
log.info("服务器上传图片的名称为:"+fileName);
// 8.给图片上传相对路径赋值
visitFile.setSavePath(fileName);
// 9.创建服务器图片上传文件夹
String rootPath = fileProperties.getImageBasePath();
File fileFolder = new File(rootPath);
if (!fileFolder.exists()){
fileFolder.mkdirs();
}
log.info("获取图片上传路径:"+rootPath);
InputStream in =null;
OutputStream os =null;
File file = new File(fileFolder, fileName);
try {
if (!file.exists()){
file.createNewFile();
}
in= multipartFile.getInputStream();
os=new FileOutputStream(file);
byte[] bytes = new byte[1024];
int i=in.read(bytes);
while (i!=-1){
os.write(bytes,0,i);
i=in.read(bytes);
}
} catch (IOException e) {
log.error("图片上传失败");
}finally {
if (in!=null){
try {
in.close();
}catch (IOException e){
log.error("文件关闭流异常:"+e);
}
}
if(os!=null){
try {
os.close();
}catch (IOException e){
log.error("文件关闭流异常:"+e);
}
}
}
}
}
public class FileImageController {
@Autowired
private FileProperties fileProperties;
@Autowired
private FileImageMapper fileImageMapper;
@PostMapping("/file")
public void uploadImage(MultipartFile[] multipartFiles,@RequestParam("id") String id) throws Exception {
log.info("活动图片上传开始:图片为:"+ multipartFiles);
if (multipartFiles==null || multipartFiles.length==0){
return;
}
if (multipartFiles.length>5){
log.error("图片上传不能超过5张,图片上传的数量为:"+multipartFiles.length);
return;
}
String filePath="";
try{
VisitFile visitFile = new VisitFile();
visitFile.setVisitId(id);
for (int i=0;i
visitFile.setId(UUID.randomUUID().toString().replace("-",""));
visitFile.setFcu("276");
visitFile.setFcd(new Date());
visitFile.setLcu("276L");
visitFile.setLcd(new Date());
visitFile.setIsDel("N");
// 插入数据库
fileImageMapper.insert(visitFile);
}
}catch (Exception e){
throw new Exception(e.getMessage());
}
}
@GetMapping("look")
public void downLoadFile(@Param("id") String id, HttpServletResponse response){
if (StringUtils.isEmpty(id)){
log.error("id不能为空"+id);
}
String filePath="";
try{
log.info("文件id"+id);
VisitFile visitFile = new VisitFile();
visitFile.setId(id);
VisitFile visitFile1 = fileImageMapper.selectByPrimaryKey(visitFile);
if (null==visitFile1){
log.error("访问后台获取的文件不存在");
}
response.setContentType("charset=utf-8");
// 使用图片的时候回报未能加载到PDF文档
// response.setContentType("application/pdf");
response.setContentType("Content-Type;image/jpeg");
response.setHeader("Content-Disposition","attachment:filename="+ URLEncoder.encode(visitFile1.getFileName(),"utf-8"));
// ServletOutputStream out = response.getOutputStream();
filePath=fileProperties.getImageBasePath()+visitFile1.getSavePath();
log.info("filePath"+filePath);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
// InputStream in = new FileInputStream(new File(filePath));
// response.setContentType("charset=utf-8");
try{
byte[] bytes = new byte[1024];
int len=0;
while ((len=bis.read(bytes))!=-1){
bos.write(bytes,0,len);
}
bos.flush();
}catch (Exception e){
log.info("文件查看失败");
}finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
log.error("文件关闭流异常:" + e);
}
}
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
log.error("文件关闭流异常:" + e);
}
}
}
}catch (Exception e){
log.info("查看失败");
}
}
package tk.mybatis.mapper.common.base.select;
import org.apache.ibatis.annotations.SelectProvider;
import tk.mybatis.mapper.annotation.RegisterMapper;
import tk.mybatis.mapper.provider.base.BaseSelectProvider;
@RegisterMapper
public interface SelectByPrimaryKeyMapper
@SelectProvider(
type = BaseSelectProvider.class,
method = "dynamicSQL"
)
T selectByPrimaryKey(Object var1);
}
文章来源: www.oschina.net,作者:码农屌丝,版权归原作者所有,如需转载,请联系作者。
原文链接:https://my.oschina.net/u/3892666/blog/3208207
评论 (0)
登录后可评论,请 登录 或 注册
评论您没有权限执行当前操作