博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ssh整合问题总结--在添加商品模块实现图片(文件)的上传
阅读量:6826 次
发布时间:2019-06-26

本文共 3140 字,大约阅读时间需要 10 分钟。

  今天在做毕设(基于SSH的网上商城项目)中碰到了一个文件上传的需求,就是在后台管理员的商品模块中,有一个添加商品,需要将磁盘上的图片上传到tomcat保存图片的指定目录中:

  完成这个功能需要两个步,第一是图片上传,第二是保存到数据库,在完成这个功能时候碰到了一些小问题,所以把完整的步骤记录一下:

  第一步,在form标签下,添加一个属性,enctype="multipart/form-data",  我刚开始脑袋短路将这个属性写到了type为file的那么input标签下,结果死活提交不了表单数据,差点自杀,还有要注意的一点就是<input type="file" name="upload"/>中的name的命名要与action中File的对象名保持一致.(注意紫色代码部分)

处理Action中(AdminGoodsAction.java):

package com.wang.shop.adminGoods.action;import java.io.File;import java.io.IOException;
import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import com.wang.shop.admin.entity.Admin;import com.wang.shop.goods.entity.Goods;import com.wang.shop.goods.service.GoodsService;import com.wang.shop.util.PageBean;public class AdminGoodsAction extends ActionSupport implements        ModelDriven
{ private GoodsService goodsService; private Goods goods = new Goods(); private int page; // 文件上传需要的参数 private File upload;// 上传的文件 private String uploadFileName;//上传的文件名陈 private String uploadContentType;// 接收文件上传的MIME类型 /** * 添加商品 * @return */ public String addGoods() { System.out.println(uploadFileName); goods.setGoodsPicture(uploadFileName); if (upload != null) { // 获得文件上传的磁盘绝对路径 try { String realPath = ServletActionContext.getServletContext() .getRealPath("/images"); // 创建一个文件 File diskFile = new File(realPath + File.separator + uploadFileName); // 文件上传,使用FileUtils工具类 FileUtils.copyFile(upload, diskFile); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println(goods); goodsService.saveGoods(goods); return "addGoods_succ"; } public void setGoodsService(GoodsService goodsService) { this.goodsService = goodsService; } @Override public Goods getModel() { // TODO Auto-generated method stub return goods; } public void setUpload(File upload) { this.upload = upload; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public void setPage(int page) { this.page = page; }}

  注意,我项目中存放图片的路径是WebRoot下的images文件夹,执行完操作后,如果发现该文件夹中没有出现你所上传的图片,先不要怀疑代码是否错了,应该先去tomcat安装目录下找到该项目的images文件夹,图片会上传到那里,在eclipse的images文件夹下可能会找不到,不过不用担心,只要tomcat中上传成功了,就可以用了.

  需要注意的地方有以下几点:

  1:action中需要定义三个属性,上传的文件File,上传的文件名,和上传文件的MIME类型.

  2.File类型的对象名需要和jsp中type="file"的input的name属性值相同.

  3.String类型文件名=File对象名+FileName.

  4.可以通过String realPath = ServletActionContext.getServletContext().getRealPath("/images");获得当前项目的绝对路径

  5.FileUtils的copyFile方法,可以简便的实现文件从一个目录上传到另一个目录,其中第一个参数是源文件File类型对象,第二个参数是目标文件File类型对象.这里其实就模拟了从本地上传到服务器的过程,注意参数类型都是File类型.

 

转载地址:http://nuykl.baihongyu.com/

你可能感兴趣的文章
android camera(一):camera模组CMM介绍【转】
查看>>
BZOJ 2821: 作诗(Poetize) [分块]
查看>>
TCP协议三次握手过程分析
查看>>
set排序(个人模版)
查看>>
Codeforces Round #404 (Div. 2) D. Anton and School - 2 数学
查看>>
windows进程中的几个杂项-hpguard 进程终止
查看>>
Window 7 + Ubuntu 双系统安装
查看>>
instance 怎么获得自己的 Metadata - 每天5分钟玩转 OpenStack(169)
查看>>
以AVL树为例理解二叉树的旋转(Rotate)操作
查看>>
Maven可以提交到官方公共仓库maven.org
查看>>
学霸也要会看书
查看>>
解读tensorflow之rnn 的示例 ptb_word_lm.py
查看>>
Linux内核--并发【转】
查看>>
关于对FLASH开发,starling、starling feathers、starling MVC框架的理解
查看>>
Nginx的基本配置案例
查看>>
一线架构师带你玩性能优化
查看>>
13. 关于IDEA工具在springboot整合mybatis中出现的Invalid bound statement (not found)问题
查看>>
mysql监测工具
查看>>
Centos防火墙设置与端口开放的方法
查看>>
工作总结 razor 接收datatable
查看>>