前端上传图片(文件)到后端

前端上传图片(文件)到后端

前端
如何获取文件呢?

<input id="categoryPic" accept="image/*" type="file" name="image" @change="getFile($event)" />

1.accept=“image/*” 指只接收图片,不限jpg和gif
2.@change="getFile($event) 里面的 $event 应该是当前事件的对象

getFile: function (event) {
       this.file = event.target.files[0];
       alert(this.file.name);
   }

然后取出文件数组的第一个文件就是你想要上传的文件了, 将其赋值到Vue结构里面, 函数就可以拿来用了。

update:function(){
  	if(!checkEmpty(this.bean.name, "分类名称"))
  		return;
  	var url = this.uri + "/" + this.bean.id;
  	var formdata = new FormData();
  	
  	formdata.append("name", this.bean.name);
  	formdata.append("image", this.file);
  	
  	axios.put(url, formdata).then(function(response){
     		location.href = vue.listURL;
    });
}

重点是 new 一个 FormData 类, 这个类储存数据的方式有点像 Map,
把得到的文件(图片)和其他数据 append 到里面来
(注:这里是用 vue 写的前端)

后端

/*
	 * @Transactional事务回滚
	 * 回滚: 如果你之前的代码执行了,后面却出现错误, 就要撤销之前的更改 
	 */
	@Transactional
	@PutMapping("/categories/{id}")
	public Category update(@PathVariable("id") int id, MultipartFile image, String name, HttpServletRequest request) throws IOException{
		Category c = new Category();
		c.setId(id);
		c.setName(name);
		categoryService.update(c);
		
		if( image!=null )
			saveOrUpdateImageFile(c, image, request);
		
		return c;
	}

1.MultipartFile image 是用来接收图片(文件)的;
2.HttpServletRequest request 是得到请求路径, 方便在项目目录下储存图片
3.@PathVariable(“id”) int id 是接收映射路径的 id , 不是 FormData里面的

//保存上传的图片
	public void saveOrUpdateImageFile(Category bean, MultipartFile image, HttpServletRequest request)
			throws IOException {
		File imageFolder= new File(request.getServletContext().getRealPath("img/category"));
		System.out.println("RealPath:" + request.getServletContext().getRealPath("img/category"));
		File file = new File(imageFolder,bean.getId()+".jpg");
		//如果父目录不存在则创建一个父目录
		if(!file.getParentFile().exists())
			file.getParentFile().mkdirs();
		System.out.println("first: "+ file.length());
		//将图片赋予该新创建的文件中
		image.transferTo(file);
		System.out.println("change: "+ file.length());
		BufferedImage img = ImageUtil.change2jpg(file);
		ImageIO.write(img, "jpg", file);
	}
ImageUtil.resizeImage(file, 56, 56, f_small);
			ImageUtil.resizeImage(file, 217, 190, f_middle);

修改图片大小
第一个参数是源文件, 最后一个是目标文件。

前端上传图片后端数据库通常涉及以下几个步骤: 1. **HTML 表单**: 使用 HTML 创建一个表单,包含 `input` 元素,type 设置为 "file",用户可以选择本地图片文件。 ```html <form action="/upload" enctype="multipart/form-data"> <input type="file" name="image" accept=".jpg, .jpeg, .png" /> <input type="submit" value="上传"> </form> ``` 这里的 `enctype="multipart/form-data"` 是必需的,因为它允许发送二进制数据,如图片文件。 2. **JavaScript (optional)**: 可以使用 JavaScript 来增强用户体验,例如预览图片、限制文件大小等。这通常通过 `FileReader API` 实现。 3. **AJAX 或 Fetch**: 当用户点击提交按钮,前端可以使用 AJAX 发送异步请求,将选中的图片文件作为 form 数据的一部分发送到服务器。或者,可以使用现代浏览器支持的 Fetch API 进行请求。 ```javascript const formData = new FormData(); formData.append('image', fileInput.files[0]); fetch('/upload', { method: 'POST', body: formData, }) .then(response => response.json()) .then(data => console.log('Upload successful:', data)) .catch(error => console.error('Error:', error)); ``` 4. **后端处理**: - 后端接收请求后,检查文件是否合法(比如大小、类型),然后保存到服务器文件系统(如硬盘)。 - 如果使用的是关系型数据库(如 MySQL、PostgreSQL),可能会将图片路径存储在数据库字段中,而不是直接存图片;如果是 NoSQL 数据库(如 MongoDB),则可以直接存储二进制数据。 - 返回响应给前端,告知上传状态。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值