浅谈
我一直都觉得上传图片好复杂,除了本地上传,还有局域网上传,公网上传乱七八糟的,不仅看不懂,还不想学,因为老是觉得本地上传没啥大用处,直到今天,我才看透,什么本地不本地的,统统都是一个套路!
在springboot2.×版本以后,上传时就不需要任何配置了,什么配置文件也不需要,啥也不讲了,上来就是干!
首先来一波IO流的基本操作
本地创建一个文件 向里面写入内容
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/** 在本地新建一个文件夹 里面创建一个文件 向里面写入内容 */
//1. 文件夹的路径 文件名
String directory = "E:\\test";
String filename = "test.txt";
//2. 创建文件夹对象 创建文件对象
File file = new File(directory);
//如果文件夹不存在 就创建一个空的文件夹
if (!file.exists()) {
file.mkdirs();
}
File file2 = new File(directory, filename);
//如果文件不存在 就创建一个空的文件
if (!file2.exists()) {
try {
file2.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
//3.写入数据
//创建文件字节输出流
FileOutputStream fos = new FileOutputStream(directory + "\\" + filename);
//开始写
String str = "测试数据";
byte[] bytes = str.getBytes();
//将byte数组中的所有数据全部写入
fos.write(bytes);
//关闭流
fos.close();
读取本地一个文件中的内容 写入另一个文件
import java.io.FileInputStream;
import java.io.FileOutputStream;
/** 读取本地一个文件中的内容 写入另一个文件 */
//创建文件字节输入流 这个路径下的文件必须存在
FileInputStream fis = new FileInputStream("E:\\test\\test.txt");
//创建文件字节输出流 如果这个文件不存在 会自动创建一个
FileOutputStream fos = new FileOutputStream("E:\\test\\test01.txt");
//一边读一边写
byte[] bytes = new byte[1024];
int temp = 0;
while ((temp = fis.read(bytes)) != 0) {
//将byte数组中内容直接写入
fos.write(bytes, 0, temp);
}
//刷新
fos.flush();
//关闭
fis.close();
fos.close();
下面是我自己做个一个商城项目上传图片的demo
首先是数据库表
这个项目使用的是springboot,mybatis,thymeleaf
前台html页面代码
上架的商品名称:
商品尺寸:
M
L
XL
XXL
商品价格:
上架商品数量:
商品颜色:
蓝色
白色
黑色
灰色
商品类型:
男装
女装
童装
时尚包包
原价:
商品图片:
上架日期:
controller层代码
/**
* 商品图片上传
*/
@RequestMapping("/upload")
public String upload(@RequestParam(value = "pic") MultipartFile pic,@RequestParam Map param,Model model) throws ParseException {
System.err.println("传过来的值"+param);
if(pic.isEmpty()){
System.err.println("上传文件不可为空");
}
String fileName=pic.getOriginalFilename();//得到文件名
String suffixName=fileName.substring(fileName.lastIndexOf("."));//得到后缀名
System.err.println("suffixName:"+suffixName);
String filepath="D:/tempFiles/files/";//指定图片上传到哪个文件夹的路径
fileName= UUID.randomUUID()+suffixName;//重新命名图片,变成随机的名字
System.err.println("fileName:"+fileName);
File dest=new File(filepath+fileName);//在上传的文件夹处创建文件
try {
pic.transferTo(dest);//把上传的图片写入磁盘中
} catch (IOException e) {
e.printStackTrace();
}
//到这里为止,下面的都不用再看了,跟上传没关系,都是实体类传值竟然麻烦成这个样子
Shangpin shangpin=new Shangpin();
//这里就不想改了,把fileName当成picpath传过去算了
String picpath=fileName;
shangpin.setPicpath(picpath);
shangpin.setName((String) param.get("name"));
shangpin.setSize((String) param.get("size"));
double price=Double.parseDouble(param.get("price").toString());
shangpin.setPrice(price);
shangpin.setNumber(Integer.valueOf(param.get("number").toString()));
shangpin.setColor((String) param.get("color"));
double preprice=Double.parseDouble(param.get("preprice").toString());
shangpin.setPreprice(preprice);
shangpin.setKind((String) param.get("kind"));
String sellerAccount=phone;
shangpin.setSellerAccount(sellerAccount);
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
shangpin.setTime(simpleDateFormat.parse((String) param.get("time")));
int i=selectService.insertSP(shangpin);
if(i>0){
model.addAttribute("info","商品上传成功!");
return "forward:getSP";
}
model.addAttribute("info","商品上传失败!");
return "forward:getSP";
}
对了,千万不能忘记实体类,就和上边那张表的字段相对应,一个也不能错,错了它也会错。
package com.qianlong.entity;
import java.util.Date;
public class Shangpin {
private Integer id;
private String name;
private String size;
private double price;
private String sellerAccount;
private int number;
private String color;
private double preprice;
private String picpath;
private Date time;
private String kind;
//set和get方法省略
service层忽略,来看dao层,也就是mapper文件
/**
* 上架商品(上传商品图片)
*/
@Insert(value = "insert into shangpin(name,size,price,sellerAccount,number,color," +
"preprice,picpath,time,kind) values(#{name},#{size},#{price}," +
"#{sellerAccount},#{number},#{color},#{preprice},#{picpath},#{time},#{kind})")
int insertSP(Shangpin shangpin);
然后就完成上传了,上传成功之后跳转到列表页面,使用thymeleaf提示上传成功
商品管理
商品上架
序号商品名称尺寸价格数量颜色原价商品类型图片路径添加时间操作
删除
function del(id) {
alert(id);
}
图片上传到这里就结束啦,有问题欢迎留言!