Android上传单文件和多文件(后台使用MultipartFile)

android代码:
package heath.com.microchat.utils;

import android.util.Log;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ContentBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import java.io.File;
import java.nio.charset.Charset;
import java.util.List;

import heath.com.microchat.service.ServiceRulesException;

public class UploadServerUtils {


    public static String uploadLogFile(String uploadUrl, String filePath, String folderPath) {
        String result = null;
        try {
            HttpClient hc = new DefaultHttpClient();
            hc.getParams().setParameter(
                    CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
            HttpPost hp = new HttpPost(uploadUrl);
            File file = new File(filePath);
            final MultipartEntity entity = new MultipartEntity();
            ContentBody contentBody = new FileBody(file);
            entity.addPart("file", contentBody);
            entity.addPart("folderPath", new StringBody(folderPath, Charset.forName("UTF-8")));
            hp.setEntity(entity);
            HttpResponse hr = hc.execute(hp);
            HttpEntity he = hr.getEntity();
            int statusCode = hr.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK)
                throw new ServiceRulesException(Common.MSG_SERVER_ERROR);

            result = EntityUtils.toString(he, HTTP.UTF_8);
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("TAG", "文件上传失败!上传文件为:" + filePath);
            Log.e("TAG", "报错信息toString:" + e.toString());
        }
        return result;
    }

    public static String uploadLogFiles(String uploadUrl, List<String> filePaths, String folderPath) {
        String result = null;
        try {
            HttpClient hc = new DefaultHttpClient();
            hc.getParams().setParameter(
                    CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
            HttpPost hp = new HttpPost(uploadUrl);
            final MultipartEntity entity = new MultipartEntity();
            for (String filePath:filePaths){
                File file = new File(filePath);
                ContentBody contentBody = new FileBody(file);
                entity.addPart("files", contentBody);
            }
            entity.addPart("folderPath", new StringBody(folderPath, Charset.forName("UTF-8")));
            hp.setEntity(entity);
            HttpResponse hr = hc.execute(hp);
            HttpEntity he = hr.getEntity();
            int statusCode = hr.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK)
                throw new ServiceRulesException(Common.MSG_SERVER_ERROR);
            result = EntityUtils.toString(he, HTTP.UTF_8);
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("TAG", "文件上传失败!上传文件为:" + filePaths.toString());
            Log.e("TAG", "报错信息toString:" + e.toString());
        }
        return result;
    }

}

 接单
小编承接外包,有意者可加
QQ:1944300940;微信号:wxid_g8o2y9ninzpp12

 后台代码及环境:

环境:tomcat8.5及以上,需要commons-fileupload-1.3.1.jar、commons-io-2.4.jar两个jar包;

本上传使用SSM框架,所以在springmvc.xml文件配置:

<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="UTF-8"></property>
		<property name="maxUploadSize" value="102400000"></property>
	</bean>

后台代码:

本上传示例,本人使用的是前端传入上传路劲,不在后台定死路劲。

package org.heath.controller;

import java.io.File;
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 javax.servlet.http.HttpServletRequest;

import org.heath.utils.RandomCode;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import net.sf.json.JSONArray;

@Controller
@RequestMapping("upload")
@ResponseBody
public class UploadController {
    
    @RequestMapping("fileUpload.action")
    private String fileUpload(HttpServletRequest request, @RequestParam("file") MultipartFile file, @RequestParam("folderPath") String folderPath) throws IOException {
        String fileName = "error";
        try {
            fileName = file.getOriginalFilename();
            fileName = "MicroChat_" + RandomCode.getRandomCode() + "_" + fileName;
            folderPath = request.getServletContext().getRealPath(folderPath);
            InputStream input = file.getInputStream();
            File folder = new File(folderPath);
            judeDirExists(folder);
            OutputStream outputStream = new FileOutputStream(
                    folderPath + File.separator + fileName);
            byte[] b = new byte[1024];
            while ((input.read(b)) != -1) {
                outputStream.write(b);
            }
            input.close();
            outputStream.close();
            return fileName;
        } catch (Exception e) {
            e.printStackTrace();
            return "error";
        }
    }
    
    @RequestMapping("filesUpload.action")
    private Map<String, Object> filesUpload(HttpServletRequest request, @RequestParam("files") MultipartFile[] files, @RequestParam("folderPath") String folderPath) throws IOException {
        JSONArray fileNames = new JSONArray();
        Map<String, Object> returnMap = new HashMap<String, Object>();
        folderPath = request.getServletContext().getRealPath(folderPath);
        try {
            for (int i = 0; i < files.length; i++) {
                String fileName = files[i].getOriginalFilename();
                fileName = "MicroChat_" + RandomCode.getRandomCode() + "_" + fileName;
                InputStream input = files[i].getInputStream();
                File folder = new File(folderPath);
                judeDirExists(folder);
                OutputStream outputStream = new FileOutputStream(
                        folderPath + File.separator + fileName);
                byte[] b = new byte[1024];
                while ((input.read(b)) != -1) {
                    outputStream.write(b);
                }
                input.close();
                outputStream.close();
                fileNames.add(fileName);
            }
            returnMap.put("code", "200");
            returnMap.put("msg", "success");
            returnMap.put("fileNames", fileNames);
            return returnMap;
        } catch (Exception e) {
            e.printStackTrace();
            returnMap.put("code", "414");
            returnMap.put("msg", "error");
            return returnMap;
        }
    }

    // 判断文件夹是否存在
    public static void judeDirExists(File file) {

        if (file.exists()) {
            if (file.isDirectory()) {
                System.out.println("dir exists");
            } else {
                System.out.println("the same name file exists, can not create dir");
            }
        } else {
            System.out.println("dir not exists, create it ...");
            file.mkdir();
        }

    }

}

文件及jar下载地址:Android上传单文件和多文件(后台使用MultipartFile)_multipartfile的使用,android后台上传文件-Android代码类资源-优快云下载

有不懂的地方,可以留言,我看到会进行回复。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白驹过隙时光荏苒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值