主题
文件接口——图片
直接上代码,注释的很清楚了,也可以直接黏贴使用
- 创建 java类
FileServiceImpl.java
java
import com.mymmall.service.IFileService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@Service("iFileService") // 放在IFileService接口中
public class FileServiceImpl implements IFileService {
// 日志
public Logger logger = LoggerFactory.getLogger(FileServiceImpl.class);
/**
*
* @param file spring mvc 格式的文件
* @param path 路径
* @return 没有错误则返回文件名,有错误则返回 null
*/
public String upload(MultipartFile file, String path){
// 得到文件名
String filename = file.getOriginalFilename();
// 得到扩展名
String fileExtensionName = filename.substring( filename.lastIndexOf(".") + 1 );
// 把文件名改为:唯一字符串 + 扩展名
String uploadFilename = UUID.randomUUID().toString() + "." + fileExtensionName;
// 打印日志
logger.info("上传的原始文件名:{},上传的路径:{},新文件名:{}", filename, path, uploadFilename);
// 如果没有目录则创建
File fileDir = new File(path);
if(!fileDir.exists()){
fileDir.setWritable(true);
fileDir.mkdirs();
}
// 创建文件
File targetFile = new File(path, uploadFilename);
// 上传文件
try {
// 上传成功
file.transferTo(targetFile);
} catch (IOException e) {
logger.error("上传文件异常", e);
return null;
}
return targetFile.getName();
}
}
- 创建接口
IFileService.java
- 在接口中声明上诉方法
bash
import org.springframework.web.multipart.MultipartFile;
public interface IFileService {
String upload(MultipartFile file, String path);
}
- 使用的列子
java
// 引入接口
@Autowired
private IFileService iFileService;
@RequestMapping("upload.do")
@ResponseBody
public ServerResponse upload(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request){
// 获得tomcat的上下文路径
String path = request.getSession().getServletContext().getRealPath("upload");
String targetName = iFileService.upload(file, path);
String url = "http://image.com/" + targetName;
Map fileMap = Maps.newHashMap();
fileMap.put("uri", targetName); // 文件名
fileMap.put("url", url); // 文件路径
return ServerResponse.createBySuccess(fileMap);
}