Как загрузить на http-сервер часть файла, используя POST или PUT?Могу ли я использовать описанное решение? - PullRequest
0 голосов
/ 19 октября 2011

У меня есть задача.Загрузите на http-сервер часть файла (я должен пропустить начало файла).

Как это сделать.Знаете ли вы хорошее решение?

Могу ли я использовать собственное решение?Это безопасно?

Мое решение.Я создал подкласс FileEntity, который выдает поток файлов и пропускает начало файла.

  1. Я помещаю свою сущность в запрос.

    HttpPut request = new HttpPut (this.uri);

    request.setEntity (новый FileOfsetEntity (новый файл (getDestination ()), «двоичный / октет-поток», ofset));

  2. Мой FileOfsetEntity пропускаетсяначало файла.

    class FileOfsetEntity extends FileEntity {
    
    long ofset = 0;
    public FileOfsetEntity(File file, String contentType, long ofset) {
      super(file, contentType);
      this.ofset = ofset;
    }
    @Override
    public long getContentLength() {
      return this.file.length() - ofset;
    }
    @Override
    public InputStream getContent() throws IOException {
      FileInputStream in = new FileInputStream(this.file);
      long skiped = in.skip(ofset);
      Log.w("FileOfsetEntity.getContent","skiped = " + skiped);
      return in;
    }
    @Override
    public void writeTo(final OutputStream outstream) throws IOException {
      if (outstream == null) {
          throw new IllegalArgumentException("Output stream may not be null");
      }
      InputStream instream = new FileInputStream(this.file);
      long skiped = instream.skip(ofset);
      Log.w("FileOfsetEntity.writeTo","skiped = " + skiped);
      try {
          byte[] tmp = new byte[4096];
          int l;
          long readed = skiped;
          while ((l = instream.read(tmp)) != -1) {
              readed += l;
              outstream.write(tmp, 0, l);
              Log.v("FileOfsetEntity.writeTo",file.getAbsolutePath() + " readed = " + readed + " skiped = " + skiped);
          }
          outstream.flush();
      } finally {
          instream.close();
      } }}
    

1 Ответ

1 голос
/ 19 октября 2011

Я не уверен, что это может провалиться или пройти.

Я бы предложил другой способ сделать это.Я предполагаю, что вы знаете офис перед загрузкой.

Вот ссылка для загрузки файла на сервер.

В этом коде переместите смещение, а затем начните писать егов поток.

...