分析一下图片上传相关的前端页面

上文我们使用FastDFS-Client测试了一下简单的文件上传操作,淘淘商城项目中新增商品时上传图片的功能还没实现,如下图所示。本文将花大量笔墨来教大家如何实现图片上传这个功能。

我们来看下item-add.jsp页面,可以看到上传图片触发的方法是通过叫做picFileUpload的class来处理的,在<a>标签的下方是一个隐藏域,是用来接收图片上传到图片服务器的回显地址的,当我们提交表单的时候,可以把这些图片地址保存到数据库中去。

图片上传的流程是这样的,item-add.jsp页面加载完之后,会自动调用TAOTAO.init方法进行初始化,如下图所示。

TAOTAO是在common.js文件中定义的,我们来看下common.js文件,可以看到TAOTAO = TT都是在这里定义的,如下图所示。

下面我们来编码实现图片上传这个功能。

实现图片上传功能

导包

上传图片需要依赖commons-io和commons-fileupload这两个开发包,因此我们需要在taotao-manger-web工程的Maven依赖中查看一下是否有这两个jar包,可以看到目前是有commons-io-1.3.2.jar这个jar包的(它是在taotao-common工程的Maven依赖中,而taotao-manager-web工程依赖了taotao-common工程,因此它也有了这个jar包)。

但目前没有commons-fileupload这个jar包的,因此我们需要在taotao-manager-web工程的pom文件中添加对commons-fileupload的依赖。添加的依赖如下,由于在taotao-parent工程当中统一定义了版本号,因此这里不用再指定版本号了。

<!-- 文件上传组件 -->
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId>
</dependency>

配置文件上传解析器

我们需要在taotao-manager-web工程的springmvc.xml文件当中配置一下文件上传解析器,如下图所示。

为方便大家复制,现把文件上传解析器的配置贴出:

<!-- 定义文件上传解析器 -->
<bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 设定默认编码 --><property name="defaultEncoding" value="UTF-8"></property><!-- 设定文件上传的最大值5MB,5*1024*1024 --><property name="maxUploadSize" value="5242880"></property>
</bean>

配置访问图片前缀

我们在访问图片时是以http的方式来访问的,例如http://192.168.81.132:8888/group1/M00/00/00/wKicDVjxPn2AOBiGAAHk-VzqZ6w952.jpg,从上文中我们知道图片服务器返回的图片路径是group1/M00/00/00/wKicDVjxPn2AOBiGAAHk-VzqZ6w952.jpg,也就是说没有前面那部分路径,即http://192.168.81.132:8888/,而我们又不能在代码中写死前缀,因为IP地址及端口号都有可能更改,因此最好是将它们放到配置文件当中。

于是,我们在src/main/resources/resource目录下新建一个resource.properties文件,在配置文件中输入IMAGE_SERVER_URL=http://192.168.81.132:8888/,这说明图片服务器中的Nginx配置的访问端口是8888,如下图所示。

加载外部配置文件

我们在上面新建了resource.properties这个文件之后,在Spring容器中我们就需要加载该配置文件了,因此我们在springmvc.xml配置文件中加入如下配置:

<context:property-placeholder location="classpath:resource/resource.properties" />

如此一来,springmvc.xml配置文件的完整内容就应该是下面这样子的了。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"><!-- 加载外部属性文件 --><context:property-placeholder location="classpath:resource/resource.properties" /><context:component-scan base-package="com.taotao.controller" /><mvc:annotation-driven /><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean> <!-- 配置静态资源映射 --><!-- 指定/WEB-INF/js/和/WEB-INF/css/下的所有的静态资源(包括子目录下的静态资源)都不被拦截 --><!-- mapping=/js/**:表示访问静态资源的路径的形式,/js/**表示可以访问/js/下的静态资源或者所有的子目录下的静态资源 --><mvc:resources location="/WEB-INF/js/" mapping="/js/**"/><mvc:resources location="/WEB-INF/css/" mapping="/css/**"/><!-- 配置一个文件上传解析器 --><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 设定默认编码 --><property name="defaultEncoding" value="UTF-8"></property><!-- 设定文件上传的最大值5MB,5*1024*1024 --><property name="maxUploadSize" value="5242880"></property></bean><!-- 引用Dubbo服务 --><dubbo:application name="taotao-manager-web"/><dubbo:registry protocol="zookeeper" address="192.168.81.131:2181"/>  <dubbo:reference interface="com.taotao.service.TestService" id="testService" /><dubbo:reference interface="com.taotao.service.ItemService" id="itemService" /><dubbo:reference interface="com.taotao.service.ItemCatService" id="itemCatService" /></beans>

创建Controller

我们需要新建一个PictureController类来处理图片上传操作,如下图所示。

上图中的@Value("${IMAGE_SERVER_URL}")注解是为了注入我们在resource.properties配置文件中配置的图片访问前缀。@RequestMapping("/pic/upload")注解指定了上传文件(图片)请求的url,与下图指定的url一样,以上picUpload方法中的形参(即uploadFile)与下图中的上传文件的参数名称是要一样的。

不知你有没有想过,picUpload方法应该返回什么样格式的结果呢?我们可以从kindeditor官网查看一下,如下图所示,可以看到返回值格式是json串。

那么此时我们便有三种实现方式了。第一种实现方式是直接返回Map格式的数据,json和Map数据都是key和value的形式,因此返回Map是没问题的。第二种实现方式是创建一个pojo类,该类应有三个属性,分别是error、url以及message,然后再将该类转换为json之后返回。第三种实现方式是将Map转变为json字符串返回。这里我们暂且使用第一种实现方式。

为了方便大家复制,我会把PictureController类的代码粘贴在下面。

package com.taotao.controller;import java.util.HashMap;
import java.util.Map;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;import com.taotao.utils.FastDFSClient;/*** 图片上传Controller* @author liayun**/@Controller
public class PictureController {@Value("${IMAGE_SERVER_URL}")private String IMAGE_SERVER_URL;@RequestMapping("/pic/upload")@ResponseBodypublic /*String*/ Map picUpload(MultipartFile uploadFile) {try {// 接收上传的文件// 取文件的扩展名String originalFilename = uploadFile.getOriginalFilename();String extName = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);// 上传到图片服务器FastDFSClient fastDFSClient = new FastDFSClient("classpath:resource/client.conf");String url = fastDFSClient.uploadFile(uploadFile.getBytes(), extName);url = IMAGE_SERVER_URL + url;// 响应上传图片的urlMap result = new HashMap();result.put("error", 0);result.put("url", url);return result;} catch (Exception e) {e.printStackTrace();Map result = new HashMap();result.put("error", 0);result.put("message", "图片上传失败");return result;}}}

测试图片上传功能

现在我们就来试试图片上传这个功能,如下图所示,发现点击开始上传按钮之后图片正常回显了。

接着我们点击全部插入按钮,可以看到在上传图片按钮的下方有我们刚才上传的四张图片,而且我们是可以点击任何一张图片在浏览器中浏览的,比如我们点击第四张图片。

在浏览器中访问的效果如下图所示。

这样我们的图片上传功能便实现了。

淘淘商城第27讲——实现图片上传功能相关推荐

  1. (转)淘淘商城系列——实现图片上传功能

    http://blog.csdn.net/yerenyuan_pku/article/details/72808000 上文我们使用FastDFS-Client进行了简单的文件上传操作测试,淘淘商城项 ...

  2. ckeditor java 上传_java使用CKEditor实现图片上传功能

    java如何使用ckeditor实现图片上传功能,具体内容如下 1.根据实际需要下载指定的ckeditor 2.删除文件ckeditor/plugins/image/dialogs/image.js预 ...

  3. 关于微信内置浏览器,打开图片上传功能,调用的问题

    关于微信内置浏览器,打开图片上传功能,调用的问题 前段时间,项目完结测试的时候,同事打开魅族手机测试,无意中发现一个奇葩的问题! 描述: 显示的是文件系统,列表式的,没有调用相机的功能图标,为什么呢? ...

  4. Smiditor实现图片上传功能

    Simditor 是 Tower 开源的一个基于浏览器所见即所得的文本编辑器. 相比传统的编辑器它的特点是: 功能精简,加载快速 输出格式化的标准 HTML 每一个功能都有非常优秀的使用体验 兼容的主 ...

  5. PHP实现图片上传功能

    PHP实现图片上传功能: 第一个页: picupload.php 代码如下: <form action="picop.php"  method="post" ...

  6. ckfinder php 配置,PHP中Ckeditor+Ckfinder配置图片上传功能_PHP教程

    从标题来看我们知道Ckeditor不支持图片上传功能,它是需要一个组件Ckfinder才可以支持上传图片, 本文章就来详细的介绍了如何配置Ckeditor+Ckfinder实现图片上传的功能. 第一: ...

  7. Vue 图片上传功能

    Vue 图片上传功能 Vue 图片上传功能,自定义上传 限制上传类型 & 多选: ① accept 属性只能与 配合使用.它规定能够通过文件上传进行提交的文件类型. ② multiple 属性 ...

  8. 纯前端实现图片上传功能

    纯前端实现图片上传功能,告别后端formData上传 使用ElementUI中的upload组件+腾讯云实现简单的图片上传功能 了解了upload的基本属性之后我们要开始上硬菜了 使用ElementU ...

  9. 织梦dedecms广告管理增加广告图片上传功能

    织梦的广告位管理是一个不错的插件内部插件,但是dedecms的广告管理功能稍微有点次,不能直接上传图片生成图片链接 本文就是在dedecms广告管理原有的基础上增加广告图片上传功能. 安装方法,对应自 ...

  10. Java图片上传功能

    文章目录 实现步骤 核心API 详情代码 在使用图片上传功能时,本文章采用表单提交的方法来上传,所以在表单当中需要加上参数enctype="multipart/form-data" ...

最新文章

  1. 第五篇T语言实例开发,数组空间使用(版本5.3)
  2. android 怎么换行,android textview 怎么换行?
  3. 【是泰波那契,不是斐波那契】1137. 第 N 个泰波那契数
  4. matlab将字符矩阵,matlab – 将字符串索引输入矩阵
  5. 语音编码分类及编解码标准
  6. 四种launchMode启动方式
  7. python 日期排序_python 日期排序
  8. ubuntu dpkg
  9. 数据增量更新定义_技术资讯 | TiDB在准实时数据仓库中的实践
  10. 水溶彩铅的特点技法运用
  11. JS原型链原理(链表)
  12. Zookeeper C API 指南七(Zookeeper 辅助 API 介绍)
  13. php array函数 array_search 搜索键值, 返回键名
  14. 动态规划实战1-leetcode 983.Minimum Cost For Tickets
  15. html5 中英文语言切换,使用 vue-i18n 切换中英文效果
  16. PIN track 1000x1000's result
  17. 蚂蚁金服出品,这个企业级前端应用框架你值得拥有
  18. 视频教程-计算机二级(VB)-计算机等级考试
  19. 平台级解决方案,平安给深圳的智慧工具箱
  20. qq邮箱日历同步服务器,QQ邮箱,腾讯企业邮箱,让你的日程跟着手机走

热门文章

  1. 威纶通c语言,威纶触摸屏MODBUS协议的测试数据.pdf
  2. SQL Server索引超出了数组界限解决方法
  3. 让你做个《五子棋》怎么存储棋盘上的棋子信息?
  4. 中文近义词工具包,Synonyms 发布新版本 v3.16,支持词汇表扩大至 40w+
  5. 分享一个强大的4K/8K超高清视频下载器
  6. ACM算法竞赛入门 概述
  7. Android使用keytool-importkeypair生成系统签名
  8. 基于SSM的高校后勤管理系统Java项目
  9. Windows编程入门
  10. python 繁体字与简体字互相转换