文本以及图片的上传

先是javaScript的处理

function dosubmit(){
    var th=document.form1;
    th.action="<%=path%>/servlet/ProductAction?action_flag=add";
    th.submit();
}

新建一个接口  来处理上传

package com.servlet.product.service;

import java.util.List;

public interface ProductService {
    public boolean addProduct(List<Object> params);
}

新建一个类 继承接口 完成对数据的访问

package com.servlet.product.dao;

import java.sql.SQLException;
import java.util.List;

import com.jdbc.util.MySqlConnect;
import com.servlet.product.service.ProductService;

public class ProductDao implements ProductService {
    MySqlConnect conn;

    public ProductDao() {
        conn = new MySqlConnect();
    }

    public boolean addProduct(List<Object> params) {
        boolean flag=false;
        String sql = "insert into product(proid,proname,proprice,proaddress,proimage) values(?,?,?,?,?) ";
        conn.getConnect();
        try {
            flag=conn.updataByPrepareStatement(sql, params);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            conn.releaseConnect();
        }
        return flag;
    }

}

还需要使用UUID来给数据添加主键

package com.servlet.product.util;

import java.util.UUID;

public class UUIDTools {
    public UUIDTools() {
    }

    public static String getUUID() {
        UUID uuid = UUID.randomUUID();
        System.out.println("uuid  "+uuid.toString());
        return uuid.toString().replace("-", "").substring(0, 6);
    }

}

再新建一个类 完成对业务逻辑的处理

这里使用apache的commons.fileupload的jar包 来进行文件的上传

package com.servlet.product.action;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.servlet.product.dao.ProductDao;
import com.servlet.product.service.ProductService;
import com.servlet.product.util.UUIDTools;

public class ProductAction extends HttpServlet {
private ProductService service;
    public ProductAction() {
        super();
    }

    public void destroy() {
        super.destroy();
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");

        String action_flag = request.getParameter("action_flag");
        if (action_flag.equals("add")) {
            addProduct(request, response);
        }

    }

    private void addProduct(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String path = request.getContextPath();
        // 实例化工厂
        DiskFileItemFactory factory = new DiskFileItemFactory();
        // 创建上传类
        ServletFileUpload upload = new ServletFileUpload(factory);     //设置文件大小        upload.setFileSizeMax(3*1024*1024);        //设置总文件大小        upload.setSizeMax(6*1024*1024);
        // 接收返回集
        List<FileItem> list = null;

        List<Object> params = new ArrayList<Object>();
        params.add(UUIDTools.getUUID());

        try {
            // 解析request请求
            list = upload.parseRequest(request);
            // 分开文本数据 和 非文本数据
            for (FileItem item : list) {
                if (item.isFormField()) {
                    if (item.getFieldName().equals("proname")) {
                        params.add(item.getString("utf-8"));
                    }
                    if (item.getFieldName().equals("proprice")) {
                        params.add(item.getString("utf-8"));
                    }
                    if (item.getFieldName().equals("proaddress")) {
                        params.add(item.getString("utf-8"));
                    }
                } else {
                    try {
                        String imgName = item.getName();
                        params.add(imgName);
                        String upload_path = request.getRealPath("/upload");

                        File file = new File(upload_path +"/"
                                + imgName);
                        item.write(file);

                        boolean flag=service.addProduct(params);
                        if(flag){
                            System.out.println("跳转");
                            response.sendRedirect(path+"/product/2_1_5.jsp");
                        }

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

                }

            }

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

    public void init() throws ServletException {
        service=new ProductDao();
    }

}

总结一下:

  上传时,这里使用了fileupload.jar包,于是 HTTP 请求中的复杂表单元素都被看做一个 FileItem 对象;

  FileItem 对象必须由 ServletFileUpload 类中的 parseRequest() 方法解析 HTTP 请求(即被包装之后的 HttpServletRequest 对象)出来。

  即分离出具体的文本表单和上传文件;而 ServletFileUpload 对象的创建需要依赖于 FileItemFactory 工厂将获得的上传文件 FileItem 对象保存至服务器硬盘, 即 DiskFileItem 对象。

  一般包含文本数据和非文本数据 ,这时需要对数据区分处理,使用isFormField()可以进行区分。

  DiskFileItemFactory 的 threshold 极限,即硬盘缓存 为1M; 使用setSizeThreshold()可以设置最大值。

  使用 setRepository(new File(Path));可以设置临时存储文件

 

时间: 2024-08-08 07:27:07

文本以及图片的上传的相关文章

富文本编辑器handyeditor,上传和预览图片的host地址不一样

使用富文本编辑器(官网)时,大多时候都会用到图片上传,但是下载的富文本编辑器的默认配置是只有一个上传地址的host的. var he = HE.getEditor('editor', { autoHeight: true, autoFloat: false, topOffset: 0, uploadPhoto: true, uploadPhotoUrl: uploadDomain, uploadPhotoHandler: "", uploadPhotoSize: 200, upload

SSM配置Ueditor实现图片的上传&lt;一&gt;

最近想学点新的东西,于是琢磨着用SSM整合Ueditor来实现图片的上传!至于为什么选Ueditor,道理你懂得啦!百度开发的而且开源,能自定义自己想要的内容,版本更新什么的也比较勤快!接下来我准备记录下探索的过程! 1.下载 点击跳转到Ueditor下载界面 你可以到上面的地址下载Ueditor插件,选择UTF-8编码的Jsp版本. 2.构建工程 新建一个Maven工程,首先把ssm框架的基本的东西搭建好,如果你不清楚ssm基本框架,我博客里面有详细的搭建过程可以参考!在这我就直接上图了! 3

将UEditor的图片批量上传抠出来单独使用

在Web项目中,经常有这样一个需求,就是对图片的批量上传,利用form表单的file可以实现图片的上传,但是用户体验不好,而且不支持ajax提交,网上也有很多图片上传插件,有基于javascript的,也有基于flash的,但是给我的感觉,要么用户体验不好,要么收费的,那么能不能有一个比较好的方案呢?那就是Ueditor! UEditor是百度出品的一款富文本编辑器,里面也集成了一个基于Flash的图片上传插件,由于Ueditor是开源的,所以源代码很容易得到,经过我的一番研究,找到了它的图片上

HTML5 本地裁剪图片并上传至服务器(转)

很多情况下用户上传的图片都需要经过裁剪,比如头像啊什么的.但以前实现这类需求都很复杂,往往需要先把图片上传到服务器,然后返回给用户,让用户确定裁剪坐标,发送给服务器,服务器裁剪完再返回给用户,来回需要 5 步.步骤繁琐不说,当很多用户上传图片的时候也很影响服务器性能. HTML5 的出现让我们可以更方便的实现这一需求.虽然这里所说的技术都貌似有点过时了(前端界的“过时”,你懂的),但还是有些许参考价值.在这里我只说一下要点,具体实现同学们慢慢研究. 下面奉上我自己写的一个demo,在输入框中选好

Laravel项目中使用markdown编辑器及图片粘贴上传七牛云

本文为转载,原文:http://www.chairis.cn/blog/article/15 Markdown Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式.本次我们选用的编辑器是: Editor.md,官网中也有很详细的介绍.从官网中下载安装下载的内容中,也有很多demo可以借鉴.在下载的包中,去除一些多余的内容,只保留我们需要的内容,然后加到项目的public目录下,如下图红色框内的内容: 项目中使用 在项目中使用edit

xhEditor实现ctrl+v粘贴word图片并上传

自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了.一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器)中时,编辑器都无法自动上传图片.需要用户手动一张张上传Word图片.如果只有一张图片还能够接受,如果图片数量比较多,这种操作就显得非常的麻烦. 1.只粘贴图片并上传到服务器 config.extraPlugins = 'uploadimage'; //config.uploadUrl = '上传路径

onethink框架 编辑器图片没有上传权限

昨天遇到了一个有点蛋疼的问题,创建了一个用户,但是在添加数据的时候,发现编辑器中的图片上传不能使用老是提示下图的那种提示: 然后自己一直在想,怎么编辑器还要图片上传权限呢,淡淡的忧伤啊.然后自己琢磨了一会,发现自己解决不了.立马到Q群中询问,一问,还真的搞定了.原来是要设置权限,不过这个权限是框架数据中早就有了,我们只需要勾选上就可以了.当然了,我这种情况只适用于直接在框架demo上扩展使用的项目,如果完全是自己编写的,那就要看你们各自的构建是咋样的啦.废话不多说,上图:这下子清净了,搞定,再也

iOS实现视频和图片的上传

关于iOS如何实现视频和图片的上传, 我们先理清下思路 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. 如何把视频存到缓存路径中? #5. 如何上传? 接下来, 我们按照上面的思路一步一步实现 首先我们新建一个类, 用来储存每一个要上传的文件uploadModel.h #import <Foundation/Foundation.h> @interface uploadModel : NSObject @property (nonatomic

Html5+asp.net mvc 图片压缩上传

在做图片上传时,大图片如果没有压缩直接上传时间会非常长,因为有的图片太大,传到服务器上再压缩太慢了,而且损耗流量. 思路是将图片抽样显示在canvas上,然后用通过canvas.toDataURL方法得到base64字符串来实现压缩. 废话不多少不多说直接看代码: 本次测试使用了 zepto.min.js 插件,更新版本的下载请点击这里 主要js代码: //图片压缩处理 ; (function () { /** * 加载的时候进行抽样检测 * 在iOS中,大于2M的图片会抽样渲染 */ func