@Override
    public PartResult call() throws Exception {
      PartResult tr = null;
      RandomAccessFile output = null;
      InputStream content = null;

      try {
        DownloadPart downloadPart = downloadCheckPoint.downloadParts.get(partIndex);
        tr = new PartResult(partIndex + 1, downloadPart.start, downloadPart.end);

        output = new RandomAccessFile(downloadFileRequest.getDownloadFile(), "rw");
        output.seek(downloadPart.start);

        GetObjectRequest getObjectRequest =
            new GetObjectRequest(downloadFileRequest.getBucketName(), downloadFileRequest.getKey());
        getObjectRequest.setMatchingETagConstraints(
            downloadFileRequest.getMatchingETagConstraints());
        getObjectRequest.setNonmatchingETagConstraints(
            downloadFileRequest.getNonmatchingETagConstraints());
        getObjectRequest.setModifiedSinceConstraint(
            downloadFileRequest.getModifiedSinceConstraint());
        getObjectRequest.setUnmodifiedSinceConstraint(
            downloadFileRequest.getUnmodifiedSinceConstraint());
        getObjectRequest.setResponseHeaders(downloadFileRequest.getResponseHeaders());
        getObjectRequest.setRange(downloadPart.start, downloadPart.end);

        OSSObject ossObj = objectOperation.getObject(getObjectRequest);
        objectMetadata = ossObj.getObjectMetadata();
        content = ossObj.getObjectContent();

        byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
        int bytesRead = 0;
        while ((bytesRead = content.read(buffer)) != -1) {
          output.write(buffer, 0, bytesRead);
        }

        downloadCheckPoint.update(partIndex, true);
        if (downloadFileRequest.isEnableCheckpoint()) {
          downloadCheckPoint.dump(downloadFileRequest.getCheckpointFile());
        }
      } catch (Exception e) {
        tr.setFailed(true);
        tr.setException(e);
        logException(String.format("Task %d:%s upload part %d failed: ", id, name, partIndex), e);
      } finally {
        if (output != null) {
          output.close();
        }

        if (content != null) {
          content.close();
        }
      }

      return tr;
    }
 public static void readContent(String bucketName, String key, OSSClient client)
     throws IOException {
   BufferedReader br = null;
   try {
     OSSObject objec = client.getObject(bucketName, key);
     br = new BufferedReader(new InputStreamReader(objec.getObjectContent()));
     String line = br.readLine();
     while (line != null) {
       System.out.println(line);
       line = br.readLine();
     }
     System.out.println("读完啦!");
   } catch (Exception e) {
     System.err.println(e);
   } finally {
     br.close();
   }
 }
  /**
   * 下载文件
   *
   * @author [email protected]
   * @param fileId
   * @return
   * @throws IOException
   */
  public FileInfo download(String fileId) throws IOException {
    logger.debug("download file from OSS--start");
    if (fileId == null || fileId.equals("")) {
      throw new IllegalArgumentException("fileId不能为null或者空字符串");
    }
    OSSClient client = this.getOSSClient();
    OSSObject ossObject = client.getObject(bucketName, fileId);
    FileInfo fileInfo = new FileInfo();
    InputStream is = ossObject.getObjectContent();
    byte[] content = IOUtils.readStreamAsByteArray(is);
    checkContent(content);
    ObjectMetadata objectMetadata = ossObject.getObjectMetadata();
    String fileName = objectMetadata.getUserMetadata().get("filename");
    fileInfo.setFileContent(content);
    fileInfo.setFileName(fileName);

    logger.debug("download file from OSS--end");
    return fileInfo;
  }
  public static void main(String[] args) throws IOException {
    /*
     * Constructs a client instance with your account for accessing OSS
     */
    OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);

    try {
      /*
       * Append an object from specfied input stream, keep in mind that
       * position should be set to zero at first time.
       */
      String content = "Thank you for using Aliyun Object Storage Service";
      InputStream instream = new ByteArrayInputStream(content.getBytes());
      Long firstPosition = 0L;
      System.out.println("Begin to append object at position(" + firstPosition + ")");
      AppendObjectResult appendObjectResult =
          client.appendObject(new AppendObjectRequest(bucketName, key, instream).withPosition(0L));
      System.out.println(
          "\tNext position="
              + appendObjectResult.getNextPosition()
              + ", CRC64="
              + appendObjectResult.getObjectCRC()
              + "\n");

      /*
       * Continue to append the object from specfied file descriptor at last position
       */
      Long nextPosition = appendObjectResult.getNextPosition();
      System.out.println("Continue to append object at last position(" + nextPosition + "):");
      appendObjectResult =
          client.appendObject(
              new AppendObjectRequest(bucketName, key, createTempFile())
                  .withPosition(nextPosition));
      System.out.println(
          "\tNext position="
              + appendObjectResult.getNextPosition()
              + ", CRC64="
              + appendObjectResult.getObjectCRC());

      /*
       * View object type of the appendable object
       */
      OSSObject object = client.getObject(bucketName, key);
      System.out.println("\tObject type=" + object.getObjectMetadata().getObjectType() + "\n");
      // Do not forget to close object input stream if not use it any more
      object.getObjectContent().close();

      /*
       * Delete the appendable object
       */
      System.out.println("Deleting an appendable object");
      client.deleteObject(bucketName, key);

    } catch (OSSException oe) {
      System.out.println(
          "Caught an OSSException, which means your request made it to OSS, "
              + "but was rejected with an error response for some reason.");
      System.out.println("Error Message: " + oe.getErrorCode());
      System.out.println("Error Code:       " + oe.getErrorCode());
      System.out.println("Request ID:      " + oe.getRequestId());
      System.out.println("Host ID:           " + oe.getHostId());
    } catch (ClientException ce) {
      System.out.println(
          "Caught an ClientException, which means the client encountered "
              + "a serious internal problem while trying to communicate with OSS, "
              + "such as not being able to access the network.");
      System.out.println("Error Message: " + ce.getMessage());
    } finally {
      /*
       * Do not forget to shut down the client finally to release all allocated resources.
       */
      client.shutdown();
    }
  }