android中okhttp實(shí)現(xiàn)斷點(diǎn)上傳示例-創(chuàng)新互聯(lián)

前言

創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元土默特左旗做網(wǎng)站,已為上家服務(wù),為土默特左旗各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220

之前項(xiàng)目需要上傳大文件的功能,上傳大文件經(jīng)常遇到上傳一半由于網(wǎng)絡(luò)或者其他一些原因上傳失敗。然后又得重新上傳(很麻煩),所以就想能不能做個(gè)斷點(diǎn)上傳的功能。于是網(wǎng)上搜索,發(fā)現(xiàn)市面上很少有斷點(diǎn)上傳的案例,有找到一個(gè)案例也是采用SOCKET作為上傳方式(大文件上傳,不適合使用POST,GET形式)。由于大文件夾不適合http上傳的方式,所以就想能不能把大文件切割成n塊小文件,然后上傳這些小文件,所有小文件全部上傳成功后再在服務(wù)器上進(jìn)行拼接。這樣不就可以實(shí)現(xiàn)斷點(diǎn)上傳,又解決了http不適合上傳大文件的難題了嗎?。。?/p>

原理分析

Android客戶端

首先,android端調(diào)用服務(wù)器接口1,參數(shù)為filename(服務(wù)器標(biāo)識(shí)判斷是否上傳過(guò))

如果存在filename,說(shuō)明之前上傳過(guò),則續(xù)傳;如果沒(méi)有,則從零開(kāi)始上傳。

然后,android端調(diào)用服務(wù)器接口2,傳入?yún)?shù)name,chunck(傳到第幾塊),chuncks(總共多少塊)

android中okhttp實(shí)現(xiàn)斷點(diǎn)上傳示例

android中okhttp實(shí)現(xiàn)斷點(diǎn)上傳示例

服務(wù)器端

接口一:根據(jù)上傳文件名稱filename 判斷是否之前上傳過(guò),沒(méi)有則返回客戶端chunck=1,有則讀取記錄chunck并返回。

接口二:上傳文件,如果上傳塊數(shù)chunck=chuncks,遍歷所有塊文件拼接成一個(gè)完整文件。

 服務(wù)端源代碼

服務(wù)器接口1

@WebServlet(urlPatterns = { "/ckeckFileServlet" })
public class CkeckFileServlet extends HttpServlet {

  private FileUploadStatusServiceI statusService;
  String repositoryPath;
  String uploadPath;

  @Override
  public void init(ServletConfig config) throws ServletException {
    ServletContext servletContext = config.getServletContext();
    WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
    statusService = (FileUploadStatusServiceI) context.getBean("fileUploadStatusServiceImpl");

    repositoryPath = FileUtils.getTempDirectoryPath();
    uploadPath = config.getServletContext().getRealPath("datas/uploader");
    File up = new File(uploadPath);
    if (!up.exists()) {
      up.mkdir();
    }
  }

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // TODO Auto-generated method stub

    String fileName = new String(req.getParameter("filename"));
    //String chunk = req.getParameter("chunk");
    //System.out.println(chunk);
    System.out.println(fileName);
    resp.setContentType("text/json; charset=utf-8");

    TfileUploadStatus file = statusService.get(fileName);

    try {
      if (file != null) {
        int schunk = file.getChunk();
        deleteFile(uploadPath + schunk + "_" + fileName);
        //long off = schunk * Long.parseLong(chunkSize);
        resp.getWriter().write("{\"off\":" + schunk + "}");

      } else {
        resp.getWriter().write("{\"off\":1}");
      }
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

當(dāng)前題目:android中okhttp實(shí)現(xiàn)斷點(diǎn)上傳示例-創(chuàng)新互聯(lián)
文章分享:http://bm7419.com/article2/cdeoic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、全網(wǎng)營(yíng)銷推廣企業(yè)建站、小程序開(kāi)發(fā)、網(wǎng)站制作、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化