android多文件上傳,java服務端接收


Android多文件上傳,java服務端接收

1、Android端

依賴

compile 'com.squareup.okhttp3:okhttp:3.3.0'

代碼:

String uploadUrl = "http://xxx/uploadFiles";//上傳的接口地址
List<String> filePaths = "";//上傳的Android本地文件地址集合
// Android 4.0 之后不能在主線程中請求HTTP請求 new Thread(new Runnable() { @Override public void run() { uploadFiles(uploadUrl, filePaths); } }).start(); /** * 多文件上傳 * @param uploadUrl 文件上傳接口地址 * @param filePaths 上傳的文件路徑集合 * @return */ public void uploadFiles(String uploadUrl, List<String> filePaths) { MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM); for (int i = 0; i < filePaths.size(); i++) { //對文件進行遍歷 String fname = filePaths.get(i); File tempfile = new File(fname); //根據文件的后綴名,獲得文件類型 builder.setType(MultipartBody.FORM) .addFormDataPart("id",id)// 其他參數信息 .addFormDataPart( //給Builder添加上傳的文件 "files", //請求的名字 tempfile.getName(), //文件的文字,服務器端用來解析的 RequestBody.create(MediaType.parse("multipart/form-data"), tempfile)//創建RequestBody,把上傳的文件放入 ); } MultipartBody requestBody = builder.build(); Request request = new Request.Builder() .url(uploadUrl) .post(requestBody) .build(); OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10000, TimeUnit.SECONDS) .readTimeout(10000, TimeUnit.SECONDS) .writeTimeout(10000, TimeUnit.SECONDS).build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { Log.e("TAG", "返回內容===失敗>:" + e.toString()); } @Override public void onResponse(Call call, Response response) throws IOException { String result = response.body().string(); Log.e("TAG", "返回內容===成功>:" + result); } }); }

 2、java服務端接收代碼

/**
     * 多文件上傳
     * @author qt
     * @param files  上傳的文件
     * @param id  其他信息參數
     * @return
     */
    @PostMapping("/uploadFiles")
    @ResponseBody
    public String multiFileUpload( @RequestParam(value = "files")MultipartFile[] files,@RequestParam(value = "id") String id) {
        String servicePath = "/usr/local/files/";//linux服務器的絕對地址
        JSONObject resultObj = new JSONObject();
        if (files.length == 0) {
            resultObj.put("code",201);
            resultObj.put("msg","上傳文件為空");
        }else {
            try {
                for (MultipartFile file : files) {
                    String fileName = file.getOriginalFilename();  // 文件名
                    //獲取最后一個.的位置
                    int lastIndexOf = fileName.lastIndexOf(".");
                    //獲取文件的后綴名
                    String suffix = fileName.substring(lastIndexOf);
                    //獲取文件的前綴名
                    String prefix = fileName.substring(0,lastIndexOf);
                    //給文件重命名
                    String newFileName = prefix + "_" + System.currentTimeMillis() + suffix;
                    //獲取文件需要上傳到的路徑
                    String path = servicePath + newFileName; // 新文件名
                    File dest = new File(path);
                    // 如果文件的父路徑不存在,則創建
                    if (fileName.startsWith("/") && !dest.getParentFile().exists()) {
                        dest.getParentFile().mkdirs();
                    }
                    // 開始存放文件到指定目錄去
                    file.transferTo(dest);
                }
                resultObj.put("code",200);
                resultObj.put("msg","文件上傳成功");
            } catch (IOException e) {
                e.printStackTrace();
                resultObj.put("code",201);
                resultObj.put("msg","文件上傳失敗");
            }
        }
        return resultObj.toString();
    }

 總結:實踐是檢驗真理的唯一標准。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM