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

  今天在做毕设(基于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类型.

时间: 2024-07-30 18:03:19

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

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

黏包: 同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就是黏包. 只有TCP协议中才会产生黏包,UDP协议中不会有黏包(udp协议中数据会直接丢失,俗称丢包) #面试 #首先只有在TCP协议中才有黏包现象,是因为TCP协议是面向流的协议, #在发送的数据传输的过程中还有缓存机制来避免数据丢失 #因此在连续发送小数据的时候,以及接收大小不符的时候,都容易产生黏包现象 #本质是不知道客户端发送的数据长度 面试中解释黏包 #连续send

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

python已经默认安装了ftplib模块,用其中的FTP类可以实现FTP文件的上传下载 FTP文件上传下载 # coding:utf8 from ftplib import FTP def upload(f, remote_path, local_path): fp = open(local_path, "rb") buf_size = 1024 f.storbinary("STOR {}".format(remote_path), fp, buf_size) f

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

在gxpt_uas系统,为了实现文件(文件和图片等.,灵活配置)批量上传到mongodb,在学习的过程中,知道mongodb,功能,实现思路:在DWZ的基础上參考官方的实例结合现有的GXPT来实现,期间看了非常多的博客,对于这些框架来说,基本的学习还是应该以文档指导为主,多看官方的手冊(即便来说文档非常少),多查资料.总的来看.能够说这是DWZ集成过来的插件,主要是js来实现,逐步的体会到了JS厉害,我们对于这些前端框架的学习都是一个道理的(easyui.DWZ.ExtJs等等),仅仅要我们有个

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

Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载 2018年5月26日 19:03 阅读 375 评论 7 我本地和服务器的连接一直使用的是 Xshell 5,而在与服务器进行文件操作的时候使用的是 Xshell 推荐安装的一个工具 Xftp 5,然而,昨天自己想着从服务器下载备份好的的数据库文件到本地的时候发现这个文件传输工具居然过期不能用了,好气啊!于是没办法(机智如我)只好用 Python 来实现 SSH 的连接,顺便从服务器批量下载一些文件,实现自动化. 项

利用paramiko模块批量登录(执行命令/上传文件)

工作中由于服务器主机很多,如果手动的一台一台去添加ssh认证,效率太低了,而此脚本正是为了解决此问题 此脚本的实现的功能: 1.实现了(密码.ssh认证)单一主机登录和批量主机登录 2.实现了(密码.ssh认证)单一主机上传文件和批量主机上传文件(下载文件的原理和此一样) 3.主机批量添加ssh认证(这才是我的主要目的) 脚本的不足: 1.只能循环主机名 2.所有的主机的账号和密码都是一样的,不够灵活 有需求的朋友可以修改下代码,可以把主机.账号密码存放在一个文件中,循环读取文件 下面贴上代码吧

SSH整合之二:添加Spring环境

2.添加spring-framework-3.1.1.RELEASE环境: 1)将下载的spring环境解压后,将dist下面的jar包拷到项目lib文件夹下面. 2)添加applicationContext.xml文件至项目config下,内容如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- 3 - Middle tier application context definition for

SSH+CKeditor下使用HttpClient实现文件的上传

序 简直*了狗了,老师需要我实现上传图片到远程文件服务器,说是为了负载均衡,资源同步,数据安全--balabala,理由能说出一大箩筐-- 身为尊老爱幼的四好青年,毕竟老师带我那么久了,他说啥就是啥--所以干-- 1.过程 各种问度娘,看博客,逛论坛--HttpClient .HttpURLConnection.FTP.SFTP...好吧各种网络传输协议都试过一遍,发现自己还是回到原点-- 自己智障的原因,懒--只想着把网上的代码复制下来,直接用,却没有好好的分析-- 2.迷茫 忙活了一个星期,

从MVC和三层架构说到SSH整合开发

相信很多人都认同JavaWeb开发是遵从MVC开发模式的,遵从三层架构进行开发的,是的,大家都这么认同.但是相信大家都会有过这样一个疑问,if(MVC三层模式==三层架构思想)out.println(“请继续观看……”) 1.MVC(MODEL-VIEW-CONTROLLER)设计模式: 首先让我们了解下MVC(Model-View-Controller)的概念: MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写

从MVC和三层架构说到ssh整合开发-上

相信很多人都认同JavaWeb开发是遵从MVC开发模式的,遵从三层架构进行开发的,是的,大家都这么认同.但是相信大家都会有过这样一个疑问,if(MVC三层模式==三层架构思想)out.println("请继续观看--") 1.MVC(Model-View-Controller)设计模式: 首先让我们了解下MVC(Model-View-Controller)的概念: MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controlle