0

ダウンロードできるファイルへの URL があります。次のようになります。

 http://<server>/recruitment-mantis/plugin.php?page=BugSynchronizer/getfile&fileID=139&filehash=3e7a52a242f90c23539a17f6db094d86

このファイルのコンテンツ タイプを取得する方法は? この場合は簡単に管理する必要があります。

   URL url = new URL(stringUrl);

   URLConnection urlConnection = url.openConnection();
   urlConnection.connect();

   String urlContent = urlConnection.getContentType();

すべてのファイルでコンテンツタイプを返しapplication/force-downloadます(jpgまたはpdfファイルは関係ありません)。ダウンロードしたファイルの拡張子を設定したいので、これをやりたいです(さまざまな可能性があります)。application/force-downloadこのコンテンツ タイプを「回避」する方法は? よろしくお願いします。

4

3 に答える 3

1

urlConnection.getHeaderField("Content-Disposition")ファイル名を確認します。通常、そのヘッダーはマルチパート コンテンツの添付ファイルに使用されますが、確認しても問題ありません。

そのヘッダーが存在しない場合は、URL を一時ファイルに保存しprobeContentType、意味のある MIME タイプを取得するために使用できます。

Path tempFile = Files.createTempFile(null, null);
try (InputStream urlStream = urlConnection.getInputStream()) {
    Files.copy(urlStream, tempFile, StandardCopyOption.REPLACE_EXISTING);
}
String mimeType = Files.probeContentType(tempFile);

probeContentTypeファイルのタイプを判別できない場合は、null が返される可能性があることに注意してください。

于 2013-05-09T11:24:23.200 に答える
0

このコンテンツ タイプは、ダウンロード元のサーバーから設定されていると思います。一部のサーバーは、これらの種類のコンテンツ タイプを使用して、ブラウザにファイルを開こうとする代わりに強制的にダウンロードさせます。たとえば、サーバーがコンテンツ タイプ「application/pdf」を返すと、chrome はそれを pdf として開こうとしますが、サーバーが「application/force-download」を返すと、ブラウザはそれをディスクに保存します。これとともに。

そのため、正しいコンテンツ タイプを返すようにサーバーを変更するか、正しいファイル タイプを取得するために他のヒューリスティックを試してください。

Java 7 では、この方法を試すことができます: http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#probeContentType%28java.nio.file.Path%29

于 2013-05-09T11:18:25.367 に答える