1

ユーザーがzipファイルをダウンロードできるURLを作成しました。zip をダウンロードするクライアントがサスペンドとレジュームのサポートを提供できるように、サーバー側で何らかのプロビジョニングを追加する必要があるかどうかを知りたかったのです。

Javaで実装されています:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // reads input file from an absolute path

  String filePath = "path to my zip file";

  File downloadFile = new File(filePath);
  FileInputStream inStream = new FileInputStream(downloadFile);

  // if you want to use a relative path to context root:
  String relativePath = getServletContext().getRealPath("");
  System.out.println("relativePath = " + relativePath);

  // obtains ServletContext
  ServletContext context = getServletContext();

  // gets MIME type of the file
  String mimeType = context.getMimeType(filePath);
  if (mimeType == null) {        
      // set to binary type if MIME mapping not found
      mimeType = "application/octet-stream";
  }
  System.out.println("MIME type: " + mimeType);

  // modifies response
  response.setContentType(mimeType);
  response.setContentLength((int) downloadFile.length());

  // forces download
  String headerKey = "Content-Disposition";
  String headerValue = String.format("attachment; filename=\"%s\"", downloadFile.getName());
  response.setHeader(headerKey, headerValue);

  // obtains response's output stream
  OutputStream outStream = response.getOutputStream();

  byte[] buffer = new byte[4096];
  int bytesRead = -1;

  while ((bytesRead = inStream.read(buffer)) != -1) {
      outStream.write(buffer, 0, bytesRead);
  }

  inStream.close();
  outStream.close();   
}
4

2 に答える 2

0

一時停止と再開をサポートする場合は、範囲または範囲ヘッダーのサポートとも呼ばれる部分的な GET のサポートを追加する必要があります。

RFC2616 (セクション 14.35) には、範囲リクエストの処理方法に関する詳細が記載されています。 https://www.rfc-editor.org/rfc/rfc2616#section-14.35

Tomcat のデフォルト サーブレットには、必要に応じて開始点として使用できる実装があります。 http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/servlets/DefaultServlet.java?view=annotate

于 2013-06-25T11:58:47.903 に答える
0

アプリケーション サーバーには、これに対するサポートが組み込まれています。サーバー構成を介してファイルを公開するだけです。使用しているサーバーが明確ではありませんが、Tomcat の場合は、次の/webappsように Tomcat のフォルダー内にファイルを含むフォルダーを配置するだけです。

apache-tomcat
 |-- bin
 |-- conf
 |-- lib
 |-- logs
 |-- temp
 |-- webapps
 |    `-- files
 |         `-- some.zip
 |-- work
 :

または、フォルダーを移動できない場合は、次のように別のフォルダーとして<Context>Tomcatに追加します。/conf/server.xml

<Context docBase="/real/path/to/folder/with/files" path="/files" />

どちらの方法でも、サーブレットを自作する必要なく、HTTP URL でファイルに直接アクセスできます。

http://localhost:8080/files/some.zip

そのための HTTP 範囲要求をサポートするサーブレットを自作することにまだ固執している場合は、この基本的な例が役立つことがあります。

于 2013-06-25T12:08:56.817 に答える