关于ajaxfileupload.js上传图片使用历程(struts2)

  因为要使用上传图片功能,附加图片的描述信息, 而传统的<s: file/>由于一些限制在这个小模块中无法使用, 于是搜到了使用ajaxfileupload.js插件进行上传的方法,在使用过程中,jsp,js,struts2

  因为自己不熟悉ajax的情况出了许多的小问题,在这里记录一下, 方便自己查看,也希望能帮到他人,

  首先说一下思路,通过点击上传直接触发js 的function 调用后台把图片拷贝到指定服务器目录,返回保存的路径到前台,然后跟随图片描述信息一起用ajax异步传到后台。(PS:如果有新的方法,麻烦请告知,我只会这个了)

  首先,我先把jsp代码贴上来,

<input type="file" onchange="uploadImage(this)" id="newsImgFile" name="tbslidefile" />
<input type="hidden" id="imgPath"  name="imgPath" />

<div class="newlyhead">标题:</div>
<div class="newlycontent"><input type="text" class="upload_title" id="slideTitle" name="slideTitle"></div>
<input type="button"  value="保    存"  onclick="saveTwo();"  >

记得添加进来需要的js插件,这里我自己写的js叫做index.js

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/ajaxfileupload.js"></script>
<script type="text/javascript" src="js/index.js"></script>

下面是我自己写的js代码

function uploadImage(obj) {
    var fileElementId = "newsImgFile";  //注意这里newsImgFile是上面 input type="file"的 id 如果需要修改记得一起修改
    $("#newsImgFile").attr(‘name‘,‘file‘);  //明显.attr就是设置元素的属性值,当然如果单纯上传图片的话可以不用这么麻烦,直接在下面fileElementId:**属性跟input的id name一致就OK了,通过再次转换,可以方便在js中进行不同图片的控制,当然这里没用到
    alert("test");  //只是查看是否执行到了这里,可以去掉          
        $.ajaxFileUpload({
            url:‘uploadAction‘,       //需要链接到服务器地址
            secureuri:false,
            fileElementId:fileElementId,                            //文件选择框的id属性
            dataType: ‘json‘,                                   //服务器返回的格式,可以是其他
            success: function (response, status, xhr) {               //成功后的回调函数
                console.log(response.obj);            //这个方法可以在浏览器(chrome等)审查元素时候控制台console输出
                    //alert(response.obj);
                    $(‘#imgPath‘).val(response.obj);      //这个就是为上面input id="imgPath"赋值,一起传到后台
            },
            error: function (data, status, e) {           //相当于java中catch语句块的用法
                $(‘#imgPath‘).val(‘‘);
            }
        });
}

function saveTwo()
{
    $.ajax({
    type: "post",
    dataType: "text",
    contentType:"application/x-www-form-urlencoded; charset=utf-8",
    url: "addSlide",     //都是Action因为是使用struts2框架
    data: {
        slideTitle:$("#slideTitle").val(),
        slidePath:$("#imgPath").val()
    },
    success: function(response, status, xhr) {
        console.log(response);  //response是返回的值
        alert(status);    //status是状态,例如success
        if(status=="success")
        {
            jAlert("添加成功!","提示信息");
        }
        else
        {
            jAlert("添加失败!","提示信息");
        }
    } });
}

相信上面关于js的说明会很清楚,接下来是后台代码,单纯接收到js上传的图片并返回路径到前面js

package *****
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/**
 *@author  E—mail:
 *@version  create time:2014-6-16上午10:43:43
 *class introduce
 */
public class UploadAction extends ActionSupport {

    private File file;
    private String fileFileName;

    private String savePath;
    private String obj;
    /**
     * 私有变量file要和js中$("#newsImgFile").attr(‘name‘,‘file‘);一致,这样可以直接接受过来
     * 这里是单纯的图片上传到服务器,这个savePath是在struts.xml中配置的
     *
     *
     */
    @Override
    public String execute() throws Exception {
        String bigurl = "";
        SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
        Date now = new Date();
        String dDir = sf.format(now);
        String fExt = fileFileName.substring(fileFileName.lastIndexOf("."));
        String savePath = ServletActionContext.getServletContext().getRealPath(this.getSavePath());
        bigurl = savePath+"\\"+dDir + fExt;
        try {
            File f = this.getFile();
            FileInputStream inputStream = new FileInputStream(f);
            FileOutputStream outputStream = new FileOutputStream(bigurl);
            byte[] buf = new byte[1024];
            int length = 0;
            while ((length = inputStream.read(buf)) != -1) {
                outputStream.write(buf, 0, length);
            }
            inputStream.close();
            outputStream.flush();
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        //直接是字符串前面就可以接收到,要是跟下面注释一样转换成json前面还要转换,我试过这样可以直接在前面js中response得到,
        obj =bigurl.substring(bigurl.lastIndexOf("fileResources")) ;
//        System.out.println("\"success\":true,\"url\":\""+dDir+"/"+fExt+"\",\"bigurl\":\""+bigurl+"\"");
//        JSONObject jsonobj = JSONObject.fromObject(path);
//        obj = jsonobj.toString();

        return SUCCESS;
    }

    public File getFile() {
        return file;
    }

    public void setFile(File file) {
        this.file = file;
    }

    public String getFileFileName() {
        return fileFileName;
    }

    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }

    public String getSavePath() {
        return savePath;
    }

    public void setSavePath(String savePath) {
        this.savePath = savePath;
    }

    public String getObj() {
        return obj;
    }

    public void setObj(String obj) {
        this.obj = obj;
    }
}

至于传图片路径和图片标题到后台,得到并保存,就是淡出的struts2后台处理,就没必要贴出来了,

struts.xml中配置这个Action

<action name="uploadAction" class="com.gt.***.action.UploadAction" >
    <param name="savePath">/fileResources/imageFile</param>
    <result name="success" type="json">
        <param name="contentType">
            text/html
        </param>
    </result>
</action>

至于为什么param是这样的,我没仔细深究,如果有朋友知道麻烦告诉我,谢谢。

另外ajaxfileupload.js插件很好获得,百度一下你就可以哈哈。

 

关于ajaxfileupload.js上传图片使用历程(struts2)

时间: 2024-09-30 18:12:43

关于ajaxfileupload.js上传图片使用历程(struts2)的相关文章

ajaxfileupload.js实现无刷新异步上传图片Demo

第一步:导入ajaxfileupload.js文件 第二步:新建一个aspx,在body里面创建一个文件域,一个上传按钮 <body> <input type="file" name="file" id="fileId" /> <input type="button" value="上传" id="uploadBtn" /> <br />

使用AjaxFileUpload.js实现文件异步上传

ajax是无法提交文件的,所以在上传图片并预览的时候,我们经常使用Ifame的方法实现看似异步的效果.但是这样总不是很方便的,AjaxFilleUpload.js对上面的方法进行了一个包装,使得我们不用去管理Iframe的一系列操作,也不用影响我们的页面结构,实现异步的文件提交. html: <input type="file" name="upload" hidden="hidden" id="file_upload"

上传文件中使用ajaxfileupload.js碰到的问题

在做上传图片时需要用到异步上传值服务器,当时选用了ajax的ajaxfileupload可以上传. 这里写下踩过的坑 1:使用$.ajaxFileUpload({});函数,网页报错,提示没有这个函数. 解决:导入ajaxfileupload.js文件.简单 2:上传成功了没有执行回调,即$.ajaxFileUpload({ url:", //你处理上传文件的服务端 type: 'POST', fileElementId:'file',#文件在html中的id dataType: 'json',

Jquery AjaxFileUpload.js 上传文件 所遇问题解决办法

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">导入 AjaxFileUpload.js 文件</span> js代码 $.ajaxFileUpload({ url: 'upload',//处理图片脚本 secureuri : false, fileElementId : 'uploadImg',//file控件id da

ASP.NET 使用js插件出现上传较大文件失败的解决方法(ajaxfileupload.js第一弹)

在写这篇的时候本来想把标题直接写成报错的提示,如下: "SecurityError:Blocked a frame with origin "http://localhost:55080" from accessing a cross-origin frame." 但是有点长,会显示不全,就想还是换一下吧,想了一下 "ASP.NET 上传过大图片或文件报错解决办法", 然后当我写完这个题目之后,我觉得这篇文章好像根本没有写的必要,估计看完题目就会

ASP.NET 使用ajaxfileupload.js插件出现上传较大文件失败的解决方法(ajaxfileupload.js第一弹)

在写这篇的时候本来想把标题直接写成报错的提示,如下: “SecurityError:Blocked a frame with origin "http://localhost:55080" from accessing a cross-origin frame.” 但是有点长,会显示不全,就想还是换一下吧,想了一下 “ASP.NET 上传过大图片或文件报错解决办法”, 然后当我写完这个题目之后,我觉得这篇文章好像根本没有写的必要,估计看完题目就会想到关于web.config配置的方面了

SpringMVC结合ajaxfileupload.js实现文件无刷新上传

直接看代码吧,注释都在里面 首先是web.xml [html] view plaincopyprint? <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-

springmvc_ajax异步上传文件(基于ajaxfileupload.js)

引入js <script th:src="@{/js/ajaxfileupload.js}"></script> html <tr> <td>附件:</td> <td> <input type="hidden" id="insertcyefuji" name="fuji" /> <input type="file" i

jquery插件--ajaxfileupload.js上传文件原理分析

英文注解应该是原作者写的吧~说实话,有些if判断里的东西我也没太弄明白,但是大致思路还是OK的. jQuery.extend({ createUploadIframe: function (id, uri) {//id为当前系统时间字符串,uri是外部传入的json对象的一个参数 //create frame var frameId = 'jUploadFrame' + id; //给iframe添加一个独一无二的id var iframeHtml = '<iframe id="' + f