<insert id="insert" parameterType="org.linlinjava.litemall.db.domain.LitemallStorage">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into litemall_storage (`key`, `name`, `type`,
`size`, url, add_time,
update_time, deleted)
values (#{key,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR},
#{size,jdbcType=INTEGER}, #{url,jdbcType=VARCHAR}, #{addTime,jdbcType=TIMESTAMP},
#{updateTime,jdbcType=TIMESTAMP}, #{deleted,jdbcType=BIT})
</insert>
controller
之前在一家公司面试时,人家老板问我,怎么为一个方法施加权限限定.?
//去掉权限,都可以上传
//@RequiresPermissions("admin:storage:create")
@RequiresPermissionsDesc(menu={"系统管理" , "对象存储"}, button="上传")
@PostMapping("/create")
public Object create(@RequestParam("file") MultipartFile file) throws IOException {
System.out.println(file);
System.out.println("---------------");
String originalFilename = file.getOriginalFilename();
LitemallStorage litemallStorage = storageService.store(file.getInputStream(), file.getSize(), file.getContentType(), originalFilename);
//SysActivity activity = storageService.sos(file.getInputStream(), file.getSize(), file.getContentType(), originalFilename);
return ResponseUtil.ok(litemallStorage);
}
service
package org.linlinjava.litemall.core.storage;
import org.linlinjava.litemall.core.util.CharUtil;
import org.linlinjava.litemall.db.domain.LitemallStorage;
import org.linlinjava.litemall.db.domain.SysActivity;
import org.linlinjava.litemall.db.service.LitemallStorageService;
import org.linlinjava.litemall.db.service.SysActivityBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import java.io.InputStream;
import java.nio.file.Path;
import java.util.stream.Stream;
/**
* 提供存储服务类,所有存储服务均由该类对外提供
*/
public class StorageService {
private String active;
private Storage storage;
@Autowired
private LitemallStorageService litemallStorageService;
@Autowired
private SysActivityBiz sysActivityBiz;
public String getActive() {
return active;
}
public void setActive(String active) {
this.active = active;
}
public Storage getStorage() {
return storage;
}
public void setStorage(Storage storage) {
this.storage = storage;
}
/**
* 存储一个文件对象
*
* @param inputStream 文件输入流
* @param contentLength 文件长度
* @param contentType 文件类型
* @param fileName 文件索引名
*/
public LitemallStorage store(InputStream inputStream, long contentLength, String contentType, String fileName) {
String key = generateKey(fileName);
storage.store(inputStream, contentLength, contentType, key);
String url = generateUrl(key);
LitemallStorage storageInfo = new LitemallStorage();
storageInfo.setName(fileName);
storageInfo.setSize((int) contentLength);
storageInfo.setType(contentType);
storageInfo.setKey(key);
storageInfo.setUrl(url);
litemallStorageService.add(storageInfo);
return storageInfo;
}
public LitemallStorage storeS(InputStream inputStream, long contentLength, String contentType, String fileName) {
String key = generateKey(fileName);
storage.store(inputStream, contentLength, contentType, key);
String url = generateUrl(key);
LitemallStorage storageInfo = new LitemallStorage();
storageInfo.setName(fileName);
storageInfo.setSize((int) contentLength);
storageInfo.setType(contentType);
storageInfo.setKey(key);
storageInfo.setUrl(url);
litemallStorageService.add(storageInfo);
sos(url,fileName,contentType);
return storageInfo;
}
/*
*储存添加SysActivity
* */
public SysActivity sos(String url, String fileName,String contentType) {
SysActivity activity = new SysActivity();
activity.setArrt1(url);
activity.setArrt3("admin1");
activity.setContent(contentType);
activity.setType("2");
activity.setUserid(14);
activity.setStata("1");
activity.setZuoname(fileName);
sysActivityBiz.insert(activity);
return activity;
}
private String generateKey(String originalFilename) {
int index = originalFilename.lastIndexOf('.');
String suffix = originalFilename.substring(index);
String key = null;
LitemallStorage storageInfo = null;
do {
key = CharUtil.getRandomString(20) + suffix;
storageInfo = litemallStorageService.findByKey(key);
}
while (storageInfo != null);
return key;
}
public Stream<Path> loadAll() {
return storage.loadAll();
}
public Path load(String keyName) {
return storage.load(keyName);
}
public Resource loadAsResource(String keyName) {
return storage.loadAsResource(keyName);
}
public void delete(String keyName) {
storage.delete(keyName);
}
private String generateUrl(String keyName) {
return storage.generateUrl(keyName);
}
}
interfa
public void add(LitemallStorage storageInfo) {
storageInfo.setAddTime(LocalDateTime.now());
storageInfo.setUpdateTime(LocalDateTime.now());
storageMapper.insertSelective(storageInfo);
}