使用Webupload上传图片到FastDFS分布式文件系统

使用Webupload插件上传图片到FastDFS分布式文件系统。

前提条件:1.已安装FastDFS分布式文件系统

2.使用webuploader插件上传文件

3.maven工程已引入FastDFS依赖

图片上传及图片回显部分代码如下:

<!-- 添加商品页面 -->

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <base th:href="|${#request.getContextPath()}/|"/>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <link rel="stylesheet" href="resources/css/reset.css" type="text/css"
          media="screen" />
    <link rel="stylesheet" href="resources/css/style.css" type="text/css"
          media="screen" />
    <link rel="stylesheet" href="resources/css/invalid.css" type="text/css"
          media="screen" />
    <script type="text/javascript"
            src="resources/scripts/jquery-1.8.3.min.js"></script>

    <!-- 引入上传控件 webuploader -->
    <link rel="stylesheet" href="resources/widget/webuploader/webuploader.css" type="text/css"
          media="screen" />
    <script type="text/javascript" src="resources/widget/webuploader/webuploader.min.js"></script>

    <script>
        var uploader;
        $(function(){
            //初始化webuploader插件
            uploader = WebUploader.create({
                // 选完文件后,是否自动上传。
                auto: false,
                // swf文件路径
                swf: ‘resources/widget/webuploader/Uploader.swf‘,
                // 文件接收服务端。
                server: ‘/imgs/uploader‘,
                // 选择文件的按钮。可选。
                // 内部根据当前运行是创建,可能是input元素,也可能是flash.
                pick: ‘#filePicker‘,
                // 只允许选择图片文件。
                accept: {
                    title: ‘Images‘,
                    extensions: ‘gif,jpg,jpeg,bmp,png‘,
                    mimeTypes: ‘image/*‘
                }
            });

            //给webuploader绑定事件
            //fileQueued  当文件被加入队列以后触发
            uploader.on("fileQueued",function (file) {
                //生成图片缩略图
                uploader.makeThumb( file, function (error ,ret) {
                    if(error){
                        alert(file.name+"缩略图生成失败")
                    }else{
                        //将缩略图展示到预览图div中
                        var img = "<img src=\""+ret+"\" style=\"height: 100px; width: 100px; margin-right: 5px;\"/>"
                        $("#imgs_div").append(img);
                    }

                }, 100, 100 )
            });

            //给webupload绑定成功事件
            uploader.on("uploadSuccess",function (file,response) {
                var val = $("#image_paths").val();//获取images_path标签值
                if(val.length > 0){
                    val += "|";
                }
                val += response.imgUrl;
                $("#image_paths").val(val);//设置images_path标签值
            })
        });

        /**
         * 上传图片
         */
        function upload_imgs(){
            if(uploader){
                uploader.upload();
            }
        }
    </script>

</head>
<body>
<div id="main-content">
    <div class="content-box">
        <div class="content-box-content">
            <div class="tab-content default-tab" id="tab2">
                <form action="/goods/insert" method="post">
                    <fieldset>
                        <!-- Set class to "column-left" or "column-right" on fieldsets to divide the form into columns -->
                        <p>
                            <label>商品名称</label> <input
                                class="text-input small-input" type="text"
                                name="gname" />
                        </p>
                        <p>
                            <label>商品图片</label>
                            <!--dom结构部分-->
                            <div id="uploader-demo">
                                <!-- 存放上传图片的预览图 -->
                                <div id="imgs_div" style="border: solid 1px #D0D0D0; width: 500px; height: 120px; margin-bottom: 10px; padding: 20px;">
                                   <!-- <img src="xxx" style="height: 100px; width: 100px; margin-right: 5px;"/>
                                    <img src="xxx" style="height: 100px; width: 100px; margin-right: 5px;"/>
                                    <img src="xxx" style="height: 100px; width: 100px; margin-right: 5px;"/>
                                    <img src="xxx" style="height: 100px; width: 100px; margin-right: 5px;"/>-->
                                </div>
                                <button type="button" class="mybutton" style="margin-bottom: 10px;" onclick="upload_imgs();">上传图片</button>
                                <div id="filePicker">选择图片</div>
                                <input id="image_paths" type="hidden" name="gimage" value=""/>
                            </div>
                        </p>
                        <p>
                            <label>商品价格</label> <input
                                class="text-input small-input" type="text"
                                name="gprice" />
                        </p>
                        <p>
                            <label>商品库存</label> <input
                                class="text-input small-input" type="text"
                                name="gsave" />
                        </p>
                        <p>
                            <label>商品的描述</label>
                            <textarea class="text-input textarea wysiwyg"
                                      name="ginfo" cols="79" rows="15"></textarea>
                        </p>
                        <p>
                            <input class="mybutton" type="submit" value="提交" />
                        </p>
                    </fieldset>
                    <div class="clear"></div>
                    <!-- End .clear -->
                </form>
            </div>
            <!-- End #tab2 -->
        </div>
        <!-- End .content-box-content -->
    </div>
</div>
<!-- End #main-content -->
</body>
</html>
<!-- 商品列表页面 -->

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <base th:href="|${#request.getContextPath()}/|"/>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <!-- Reset Stylesheet -->
    <link rel="stylesheet" href="resources/css/reset.css" type="text/css"
          media="screen" />
    <!-- Main Stylesheet -->
    <link rel="stylesheet" href="resources/css/style.css" type="text/css"
          media="screen" />
    <link rel="stylesheet" href="resources/css/invalid.css" type="text/css"
          media="screen" />
    <script type="text/javascript"
            src="resources/scripts/jquery-1.3.2.min.js"></script>
    <!-- jQuery Configuration -->
    <script type="text/javascript"
            src="resources/scripts/simpla.jquery.configuration.js"></script>
</head>
<body>
<div id="main-content">
    <div class="content-box">
        <!-- End .content-box-header -->
        <div class="content-box-content">
            <div class="tab-content default-tab" id="tab1">
                <table>
                    <thead>
                    <tr>
                        <th><input class="check-all" type="checkbox" /></th>
                        <th>商品名称</th>
                        <th>商品图片</th>
                        <th>商品描述</th>
                        <th>商品价格</th>
                        <th>操作</th>
                    </tr>
                    </thead>

                    <tbody>
                        <tr th:each="good : ${goods}">
                            <td><input type="checkbox" /></td>
                            <td th:text="${good.gname}">Lorem ipsum dolor</td>
                            <!--默认展示商品的第一张图片-->
                            <td><img style="width: 120px;height: 100px;" th:src="|http://192.168.59.131/${#strings.setSplit(good.gimage,‘|‘)[0]}|"/></td>
                            <td th:text="${good.ginfo}">Consectetur adipiscing</td>
                            <td th:text="${#numbers.formatCurrency(good.gprice)}">Donec tortor diam</td>
                            <td>
                                <!-- Icons --> <a href="#" title="Edit"><img
                                    src="resources/images/icons/pencil.png" alt="Edit" /></a> <a
                                    href="#" title="Delete"><img
                                    src="resources/images/icons/cross.png" alt="Delete" /></a> <a
                                    href="#" title="Edit Meta"><img
                                    src="resources/images/icons/hammer_screwdriver.png"
                                    alt="Edit Meta" /></a>
                            </td>
                        </tr>
                    </tbody>

                    <tfoot>
                    <tr>
                        <td colspan="6">
                            <div class="bulk-actions align-left">
                                <a class="mybutton" href="/topage/goodsadd">添加商品</a>
                            </div>
                            <div class="clear"></div>
                        </td>
                    </tr>
                    </tfoot>
                </table>
            </div>
        </div>
        <!-- End .content-box-content -->
    </div>
</div>
<!-- End #main-content -->
</body>
</html>
//ImgController

import com.alibaba.fastjson.JSON;
import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@Controller
@RequestMapping("/imgs")
public class ImgController {

    @Autowired
    private FastFileStorageClient fastFileStorageClient;
    //private static final String UPLOAD_PATH = "e:\\imgs";

    @RequestMapping("/uploader")
    @ResponseBody
    public String uploadImg(MultipartFile file) {

        //获得上传文件后辍的下标 xxx.png
        int index = file.getOriginalFilename().lastIndexOf(".");//返回指定字符在此字符串中最后一次出现处的索引
        String suffix =file.getOriginalFilename().substring(index+1);
        System.out.println("截取到的文件名后辍: "+suffix);
        //文件上到FastDFS
        try {
            StorePath storePath = fastFileStorageClient.uploadImageAndCrtThumbImage(file.getInputStream(), file.getSize(), suffix, null);
            //获取上传到FastDFS中图片的路径
            String imgUrl = storePath.getFullPath();
            System.out.println("FastDFS中图片的路径: "+imgUrl);

            //将存FastDFS中图片的路径以JSON方式返回到前端页面
            Map<String,Object> map = new HashMap<>();
            map.put("imgUrl",imgUrl);
            String param = JSON.toJSONString(map);
            return param;
            //return "{\"uploadPath\":\"" + imgUrl + "\"}";

        } catch (IOException e) {
            e.printStackTrace();
        }

        /* //文件上传到本地磁盘
        try (
                InputStream inputStream = file.getInputStream();
                OutputStream outputStream = new FileOutputStream(UPLOAD_PATH + UUID.randomUUID().toString());
        ) {
            IOUtils.copy(inputStream, outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }*/

        return null;
    }
}
//GoodsController 

import com.alibaba.dubbo.config.annotation.Reference;
import com.qf.entity.Goods;
import com.qf.service.IGoodsService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
@RequestMapping("/goods")
public class GoodsController {

    @Reference
    private IGoodsService goodsService;
    /**
     * 查询商品列表
     */
    @RequestMapping("/list")
    public String goodslist(ModelMap map){
        List<Goods> goods = goodsService.queryAll();
        map.put("goods",goods);
        return "goodslist";
    }

    /**
     * 新增商品
     */
    @RequestMapping("/insert")
    public String goodsinsert(Goods goods){
        int count = goodsService.insert(goods);
        return "redirect:/goods/list";
    }
}
//spring boot的入口启动类

import com.github.tobato.fastdfs.FdfsClientConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Import;

@SpringBootApplication(scanBasePackages = "com.qf")
@Import(FdfsClientConfig.class)
public class ShopBackApplication {

    public static void main(String[] args) {
        SpringApplication.run(ShopBackApplication.class, args);
    }

}

原文地址:https://www.cnblogs.com/wakey/p/10686951.html

时间: 2024-12-31 03:37:01

使用Webupload上传图片到FastDFS分布式文件系统的相关文章

上传图片至fastdfs分布式文件系统并回显

事件,当我们浏览完图片选中一张时,触发onchange事件将图片上传到服务器并回显. 1 <img width="100" height="100" id="allUrl" src="${brand.imgUrl }"/> 2 <input type="hidden" name="imgUrl" id="imgUrl" value="${b

FastDFS 分布式文件系统 搭建部署

搭建部署FastDFS 分布式文件系统 什么是分布式文件系统 分布式文件系统 ( Distributed File System ) 是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连 分布是文件系统的设计基于客户机/服务器模式 一个典型的网络可能包括多个供多用户访问的服务器 对等特性允许一些系统扮演客户机和服务的双重角色 衡量分布式文件系统的优劣 数据的存储方式 数据的读取速率 数据安全机制 FastDFS介绍 FastDFS是一款开源分布式文件系统,它用纯

FastDfs 分布式文件系统 (实测成功)

最近公司需要搭建一台FastDfs 分布式文件系统,查询和参考了网络很多资料,但是从头到尾按他们的配置,中间都会或多或少的出错,可能是版本的问题,也可能是其他问题,经过自己不断的研究,终于成功配置完成,而且已经应用线上.现在把经验分享出来供大家参考,也作为自己的一个记录,以便今后用到能回顾一下. 1.下载软件 网上先下载需要安装的软件 2.前期准备 所需的工具下载完毕后,开始搭建准备,首先下载所需全部工具运行命令 yum -y install zlib zlib-devel pcre pcre-

django中使用FastDFS分布式文件系统接口代码实现文件上传、下载、更新、删除

运维使用docker部署好之后FastDFS分布式文件系统之后,提供给我接口如下: fastdfs tracker 192.168.1.216 192.168.1.217 storage 192.168.1.216 192.168.1.217 我们只需要在配置文件中进行配置即可,然后利用客户端提供的接口通过简单的代码就可以将文件上传到分布式文件系统中 至于内部实现机制,可以参考我的另外一篇博客:分布式文件系统Fastdfs原理及部署 再次提醒在安装客户端可能会遇到各种不可控的因素,导致你上传失败

07.Linux系统-Fastdfs分布式文件系统-互为主从配置搭建部署

Fastdfs分布式文件系统-互为主从配置部署 1.安装基础依赖 yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel unzip 2.下载安装 libfastcommon wget https://github.com/happyfish100/libfastcommon/archive/master.zip 3.解压安装 unzip master.zipcd libfastcommon

一键架设FastDFS分布式文件系统脚本,基于Centos6

一.使用背景 业务驱动技术需要,原来使用 FTP和 Tomcat upload目录的缺陷日渐严重,受限于业务不断扩大,想使用自动化构建,自动化部署,Zookeeper中心化,分布式RPC DUBBO等技术时,遇到文件存储的瓶颈,因此需求一个使用分布式文件系统注入新的活力. 二.环境 参考 http://blog.csdn.net/hhq163/article/details/46536895 这个博主的博客安装比较新 FastDFS 版本. 在 Docker 下 使用最小化安装的 Centos6

fastdfs分布式文件系统之与dubbo整合实现分布式服务接口

fastdfs是开源的轻量级分布式文件系统,它提供了java版本的client api.通过client API可以实现对文件的上传.追加.下载.删除等功能. 为了避免每个应用都配置fasdtfs参数.读取配置文件.调用client api获取trackerServer和StorageServer进行上传.下载.删除等操作及返回结果的 处理.所以采用与dubbo整合,提供分布式服务接口,来简化其它服务和应用的文件操作处理,同时提高代码的复用性. 1.总体结构 如图,总共分为fastdfs-api

JavaWeb项目架构之FastDFS分布式文件系统

概述 分布式文件系统:Distributed file system, DFS,又叫做网络文件系统:Network File System.一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间. FastDFS是用c语言编写的一款开源的分布式文件系统,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合中小文件(建议范围:4KB < f

FastDFS分布式文件系统&amp;Nginx负载均衡最小环境安装配置[超级详解]

1.背景 FastDFS 是一款开源的.分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发.该开源项目的主页是 http://code.google.com/p/fastdfs .可以通过 fastdfs.sourceforge.net 下载.FastDFS论坛是 http://www.csource.org ,目前是指向 ChinaUnix 开源项目孵化平台的一个板块 FastDFS,网址为 bbs.chinaunix.net/forum-24