浅谈

我一直都觉得上传图片好复杂,除了本地上传,还有局域网上传,公网上传乱七八糟的,不仅看不懂,还不想学,因为老是觉得本地上传没啥大用处,直到今天,我才看透,什么本地不本地的,统统都是一个套路!

在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);

}

图片上传到这里就结束啦,有问题欢迎留言!

java io流上传图片_SpringBoot上传图片和IO流的基本操作相关推荐

  1. Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter

    Java IO流学习总结四:缓冲流-BufferedReader.BufferedWriter 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/det ...

  2. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

    Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ ...

  3. Java的知识点28——文件编码、IO流的实例

    文件编码  字符 -->字节  (编码 encode)           字节 --> 字符(解码 decode) 节点流  处理流 package cn.dym;import java ...

  4. java io流顶层_Java中的IO流(一)

    一,IO流的分类 A,按照操作的对象不同可分为字节流与字符流 B,按照流的方向不同可分为输入(指从外部存储设备拿文件到内存)流也叫读与输出(指从内存把文件写入到外部存储设备)流也叫写 注:字节流可以操 ...

  5. 第三次学JAVA再学不好就吃翔(part101)--IO流

    学习笔记,仅供参考 文章目录 IO流 IO流的概述及其分类 FileInputStream 构造方法 成员方法 举个例子 FileOutputStream 构造方法 成员方法 举个例子 IO流 IO流 ...

  6. java.io.file.sync_Java(25)IO流和File类

    IO流+File类 File类 讲IO流之前先来讲以下File类.Java的标准库Java.io提供了File类来操作文件和目录.操作可以有:新建.删除.重命名等,但是不能访问文件本身的内容,如果想要 ...

  7. Java知多少(66)输入输出(IO)和流的概述

    输入输出(I/O)是指程序与外部设备或其他计算机进行交互的操作.几乎所有的程序都具有输入与输出操作,如从键盘上读取数据,从本地或网络上的文件读取数据或写入数据等.通过输入和输出操作可以从外界接收信息, ...

  8. java io 创建文件夹_Java中Io流操作-File类的常用操作-创建文件,创建文件夹

    package com.hxzy.IOSer; import java.io.File; import java.io.IOException; public class Demo03 { publi ...

  9. Java中使用try-with-resource优雅的关闭io流

    前言 最近看到一篇关于串流的关闭方法,通过编译器自动生成关闭串流源码,行之有效. 转载自博主: Java劝退师. https://blog.csdn.net/qq_41389354/article/d ...

最新文章

  1. gunzip 和 unzip 解压文件到指定的目录
  2. 一般家用监控多少钱_家用煤气灶价格一般是多少 燃气灶安装的流程
  3. MobaXterm无法退格删除,出现^H
  4. 计算机专业毕业了,还要不要参加培训班?——Leo网上答疑(8)
  5. 接口隔离原则_设计模式的三大分类及六大原则
  6. Linux文件查看/编辑方法介绍
  7. 安装RHEL 7.5 Server版本(RedHat 7.5 Server) 图文教程
  8. Python练习:阶乘累计求和
  9. bzoj 1023: [SHOI2008]cactus仙人掌图(仙人掌求直径)
  10. React 父组件获取子组件的方法/数据(useRef
  11. bzoj-1488 图的同构
  12. 案例分析:股票涨跌预测
  13. 分别使用while、do-while和for循环输出1-1000中含有7或者7倍数的整数之和及个数-详解
  14. AndroidStudio导入Bmob后端云一系列错误
  15. 新造车杀入15万,燃油车慌了?
  16. 教你实现一个简单的对象深拷贝
  17. 停车场管理系统车牌识别中的无感支付有什么bug
  18. 基于稳态视觉诱发电位(SSVEP)的中文拼写器脑机接口(BCI)对于应用于ALS患者
  19. 还在疑惑并发和并行?
  20. 分数用计算机怎么分数除法,分数除法怎么算

热门文章

  1. mysql的查询分析工具下载_万能数据库查询分析器(ODBC数据库查询分析工具)V7.03 最新版...
  2. 自适应,响应式以及图片的性能优化(响应式图片)
  3. 机器学习之提升方法Adaboost算法
  4. Hash函数经典用法
  5. Java体系知识之ElementUI
  6. 彩色图像加密matlab算法,彩色图像混沌加密算法
  7. 在sae上面运行微信第三方平台微擎,带视频录像
  8. Vue(1706E)
  9. unity查询当前屏幕分辨率
  10. 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。