SpringMVC结合Ajaxfileupload异步多文件上传至远程服务器

<input type="file" id="playeraddress" name="playeraddress" />
<input type="file" id="cover" name="cover" />
//这里就是两个file id自己定义
$.ajaxFileUpload({
    url : web_path+‘upload/upload.do‘,
    secureuri : false,
    data : data,//需要传递的数据 json格式
    fileElementId :[‘playeraddress‘,‘cover‘],
    dataType : ‘json‘,
    success : function(data) {
           //上传成功后的回调。
    },
    error : function(data) {
    }
});
/**
     *
     * 
     * @param request
     * @param response
     * @param audioItem
     * @return
     */
    @RequestMapping(value = "/upload.do", method = { RequestMethod.POST })
    @ResponseBody
    public String addMusic(HttpServletRequest request,
            HttpServletResponse response, AudioItem audioItem) {
        //这里无需理会,这只是
        String uploadFileUrl = GlobalUtil .getValue("upload_audioItem_audio_url");
        String uploadIconUrl = GlobalUtil.getValue("upload_audioItem_pic_url");

        CommonsMultipartResolver resolver = new CommonsMultipartResolver(
                request.getServletContext());
        if (resolver.isMultipart(request)) {
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
            // 取得request中的所有文件名
            Iterator<String> iter = multiRequest.getFileNames();
            while (iter.hasNext()) {
                String fileName = iter.next();
                // 取得上传文件
                MultipartFile file = multiRequest.getFile(fileName);
                /**
                 * 获取文件名
                 */
                String originalFilename = file.getOriginalFilename();
                
                if ("playeraddress".equals(fileName)&&!"".equals(originalFilename)) {
                    try {
                        //这里的upload方法就是以http post的方式上传文件的 稍后贴出
                        String url = BaseService.upload(uploadFileUrl,
                                file.getOriginalFilename(),
                                file.getInputStream());
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if ("cover".equals(fileName)&&!"".equals(originalFilename)){
                    try {
                        String icon = BaseService.upload(uploadIconUrl,
                                file.getOriginalFilename(),
                                file.getInputStream());
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            //这里需要注意 使用Ajaxfileupload需要使用以下方式返回结果 回调不了success 方法
            response.setContentType("text/html");
  
            try {
                response.getWriter().write("ok");
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        return null;
    }
//最后一步了 
    public static String upload(String httpurl, String fileName, InputStream inputStream) {
        String result = "";
        try {
            //这里看你的网络环境 按需设置代理  正常都不需要理会
            if (true) {
                System.setProperty("http.proxyHost", BaseService.PROXY_IP);
                System.setProperty("http.proxyPort", BaseService.PROXY_PORT);
            }
            String BOUNDARY = "---------7d4a6d158c9"; // 定义数据分隔线
            URL url = new URL(httpurl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
            conn.setRequestProperty("Charsert", "UTF-8");
            conn.setRequestProperty("Content-Type",
                    "multipart/form-data; boundary=" + BOUNDARY);
            OutputStream out = new DataOutputStream(conn.getOutputStream());
            byte[] end_data = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();// 定义最后数据分隔线
            StringBuilder sb = new StringBuilder();
            sb.append("--");
            sb.append(BOUNDARY);
            sb.append("\r\n");
            sb.append("Content-Disposition: form-data;name=\"file" + 1
                    + "\";filename=\"" + fileName + "\"\r\n");
            sb.append("Content-Type:application/octet-stream\r\n\r\n");
            byte[] data = sb.toString().getBytes();
            out.write(data);
            DataInputStream in = new DataInputStream(inputStream);
            int bytes = 0;
            byte[] bufferOut = new byte[1024];
            while ((bytes = in.read(bufferOut)) != -1) {
                out.write(bufferOut, 0, bytes);
            }
            out.write("\r\n".getBytes()); // 多个文件时,二个文件之间加入这个
            in.close();
            out.write(end_data);
            out.flush();
            out.close();
            // 定义BufferedReader输入流来读取URL的响应
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    conn.getInputStream()));

            String line = null;
            while ((line = reader.readLine()) != null) {
                result+=line;
            }
        } catch (Exception e) {
            System.out.println("发送POST请求出现异常!" + e);
        }    
        return new JSONObject(result).getString("url");
    }
// 到这就结束了!希望能帮到你。
时间: 2024-08-04 07:42:12

SpringMVC结合Ajaxfileupload异步多文件上传至远程服务器的相关文章

将本地文件上传到远程服务器

问题:由于系统在局域网(能访问外网)内,但外网无法请求局域网内服务器文件和进行处理文件. 解决:建立文件服务器,用于存储文件及外网调用. 客户端(文件上传): package cn.hkwl.lm.util; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; imp

php把文件上传到远程服务器上例子

在这里我们利用curl实现把本地服务器的文件通过curl发送请求给远程服务器的php文件接受就实现了上传,还一个是利用ftp来上传方法也是php中的curl操作ftp服务器进行上传. 我这里写的是用curl的代码 本地代码如下: <?php header('content-type:text/html;charset=utf8'); $curl = curl_init(); $data = array('img'=>'@'. dirname(__FILE__).'/img/login.gif'

springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式)

项目中涉及了文件的上传和下载,以前在struts2下做过,今天又用springmvc做了一遍,发现springmvc封装的特别好,基本不用几行代码就完成了,下面把代码贴出来: FileUpAndDown.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>using commons Uplo

jQuery插件AjaxFileUpload实现ajax文件上传时老是执行error方法 问题原因

今天在用jQuery插件AjaxFileUpload实现ajax文件上传时,遇到一个问题,如图: 老是执行error,无法执行succes方法,追踪ajaxfileupload.js源码发现: 当执行if(type=="json")    eval("data = "+data);会抛出异常,导致在处理异常的时候将status = "error" 因此一直执行error方法. 上网查询,得知eval函数是用来执行一段js代码,而并不是如我所想的反

jQuery插件AjaxFileUpload实现ajax文件上传

jQuery插件AjaxFileUpload用来实现ajax文件上传,该插件使用非常简单,接下来写个demo演示怎么用AjaxFileUpload插件实现文件上传. 1.引入AjaxFileUpload插件相关的js <script type="text/javascript" src="<%=basePath%>resources/js/jquery-1.2.1.js"></script> <script type=&qu

Android使用HttpClient实现文件上传到PHP服务器,并监控进度条

上传 服务器端PHP 代码如下 : <?php $target_path = "./tmp/";//接收文件目录 $target_path = $target_path.($_FILES['file']['name']); $target_path = iconv("UTF-8","gb2312", $target_path); if(move_uploaded_file($_FILES['file']['tmp_name'], $targ

本地文件上传到Linux服务器的几种方法

本文介绍几种常见的方法,把文件上传到Linux服务器中! 常见有使用:scp命令.xshell软件里的xftp程序.U盘挂载.服务器自带的lrzsz程序. 一.scp使用说明: 1.把本机的文件传给目的服务器: scp get66.pcap [email protected]:/super 备注:把本机get66.pcap拷贝到147这台服务器的super目录下,需要提供147的密码 2.在本机上执行scp,把远端的服务器文件拷贝到本机上: scp [email protected]:/supe

Ueditor 前后端分离实现文件上传到独立服务器

关于Ueditor 前后端分离实现文件上传到独立服务器,在网上搜索确实遇到大坑,不过还好遇到了 虚若影 最终实现了,在此感谢!虚若影的原文博客网址:http://www.cnblogs.com/hpnet/p/6290452.html 具体项目:如下截图 1.在本地IIS 中添加网站 ueditorweb.com .ueditortest.com . testweb (注意应用程序池要选择.net的版本) 2.hosts文件中添加 127.0.0.1  ueditorweb.com  uedit

架设用Webservice实现文件上传功能CentOS服务器(二)--WebService

功能概述,看代码中注释应该可以理解 为了文件安全对url进行适当的保护处理 简单的配置功能,如文件大小限制,文件存放位置设定等 返回文件内容方法还需完善 代码: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.text.SimpleDate