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

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

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

<form action="${pageContext.request.contextPath }/adminGoods_addGoods.action" method="post" enctype="multipart/form-data">

    <input type="file" name="upload"/>

</form>

处理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<Goods> { 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类型.

ssh整合问题总结--在添加商品模块实现图片(文件)的上传的更多相关文章

  1. 黏包-黏包的成因、解决方式及struct模块初识、文件的上传和下载

    黏包: 同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就是黏包. 只有TCP协议中才会产生黏包,UDP协议中不会有黏包(udp协议中数 ...

  2. python使用ftplib模块实现FTP文件的上传下载

    python已经默认安装了ftplib模块,用其中的FTP类可以实现FTP文件的上传下载 FTP文件上传下载 # coding:utf8 from ftplib import FTP def uplo ...

  3. 第37课 thinkphp5添加商品基本信息及通过前置钩子上传商品主图 模型事件(勾子函数)

    目录 手册地址: before_insert(新增之前的操作) 要实现的功能 思路 触发条件: 1. 控制器里必须要调用模型的save()方式保存数据,用insert()触发不了勾子函数的 2. 模型 ...

  4. 文件一键上传、汉字转拼音、excel文件上传下载功能模块的实现

    ----------------------------------------------------------------------------------------------[版权申明: ...

  5. 在附件管理模块中增加对FTP 上传和预览的支持

    在之前介绍的附件管理模块里面<Winform开发框架之通用附件管理模块>以及<Winform开发框架之附件管理应用>,介绍了附件的管理功能,通过对数据库记录的处理和文件的管理, ...

  6. Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载

    Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载 2018年5月26日 19:03 阅读 375 评论 7 我本地和服务器的连接一直使用的是 Xshell 5,而在与服务 ...

  7. ssh 下载文件以及上传文件到服务器

    https://blog.csdn.net/jackghq/article/details/64124062 scp john@192.168.1.100:~/Desktop/MHN_error_so ...

  8. SSH深度历险记(九) Struts2+DWZ+Uploadify多文件(文件和图片等。)上传

    在gxpt_uas系统,为了实现文件(文件和图片等.,灵活配置)批量上传到mongodb,在学习的过程中,知道mongodb,功能,实现思路:在DWZ的基础上參考官方的实例结合现有的GXPT来实现,期 ...

  9. Python之requests模块-大文件分片上传

    最近在做接口测试时,拿到一个分片上传文件的接口,http接口请求头中的Content-Type为multipart/form-data.需要在客户端将大文件分片成数据块后,依次传给服务端,由服务端还原 ...

随机推荐

  1. web程序的路径笔记

    "/"与”\“区别:”/“是unix系统区分文件层级的标志,因为当前web应用程序在服务器端大都使用基于unix系统开发的操作系统,所以web程序包括浏览器里url都遵以”/“来区 ...

  2. Usaco*Monthly Expense

    Description Farmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的.他已经计算了他以后N(1<=N<=100 ...

  3. listview嵌套gridview,并实现grid元素部分显示以及点击展开与折叠

    原文链接:http://blog.csdn.net/duguju/article/details/49538341 有时我们需要用GridView显示目录列表,有时甚至是二级的,即listview每一 ...

  4. "SQL Server does not handle comparison of NText, Text, Xml, or Image data types."

    "SQL Server does not handle comparison of NText, Text, Xml, or Image data types." sql2000 ...

  5. 学习笔记:java并发编程学习之初识Concurrent

    一.初识Concurrent 第一次看见concurrent的使用是在同事写的一个抽取系统代码里,当时这部分代码没有完成,有许多的问题,另一个同事接手了这部分代码的功能开发,由于他没有多线程开发的经验 ...

  6. 使用jQuery.form插件,实现完美的表单异步提交

    传送门:异步编程系列目录…… 时间真快,转眼一个月快结束了,一个月没写博客了!手开始生了,怎么开始呢…… 示例下载:使用jQuery.form插件,实现完美的表单异步提交.rar 月份的尾巴,今天的主 ...

  7. ReactJS入门(一)—— 初步认识React

    React刚开始红的时候,由于对其不甚了解,觉得JSX的写法略非主流,故一直没打算将其应用在项目上,随着身边大神们的科普,才后知后觉是个好东西. 好在哪里呢?个人拙见,有俩点: 1. 虚拟DOM —— ...

  8. 【HTML5】Web Audio API打造超炫的音乐可视化效果

    HTML5真是太多炫酷的东西了,其中Web Audio API算一个,琢磨着弄了个音乐可视化的demo,先上效果图: 项目演示:别说话,点我!  源码已经挂到github上了,有兴趣的同学也可以去st ...

  9. Nova PhoneGap框架 第五章 文件结构

    一个好的项目架构必然有着合理的文件结构,如果一个项目的文件组织混乱,那么可以断言一定是项目架构有问题. 合理的文件结构能够帮你更清晰的管理你的文件,并且当需要添加新的文件的时候,你的程序员很清楚应该加 ...

  10. 免安裝、免設定的 Hadoop 開發環境 - cloudera 的 QuickStart VM

    cloudera 的 QuickStart VM,為一種免安裝.免設定 Linux 及 Hadoop,已幫你建好 CDH 5.x.Hadoop.Eclipse 的一個虛擬機環境.下載後解壓縮,可直接以 ...