quint555
@quint555

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

PDFファイルをブラウザで表示したい。

解決したいこと

拡張子がPDFを保存できるフォルダを作り、
書類をアップロード。保存されていればリンクを押したら表示できる機能を作っています。

発生している問題・エラー

現在、フォルダを作成し、書類をアップロードするところまではできたのですが、表示の仕方がわかりません。

例)

examlie.pdf

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

【pdf.html】
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>top page</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h2>ファイルアップロード</h2>
    <form method="post" enctype="multipart/form-data" th:action="@{/upload}" th:object="${form}" >
        <input th:field="*{file}" type="file" multiple/>
        <input type="submit" value="アップロード"/>
    </form>
    <ul>
        <li>
            <a href="C:/Users/Education//Desktop/save/examlie.pdf">examlie.pdf</a>
        </li>
    </ul>
</body>
</html>

例)


@Controller
public class FileUploadController {

    private String getExtension(String filename) {
      int dot = filename.lastIndexOf(".");
      if (dot > 0) {
        return filename.substring(dot).toLowerCase();
      }
      return "";
    }

    private String getUploadFileName(String fileName) {
        return fileName + "_" +
                DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")
                    .format(LocalDateTime.now())
                + getExtension(fileName);
    }

    private void createDirectory() {
        Path path = Paths.get("C:/Users/Education/Desktop/save");
        if (!Files.exists(path)) {
          try {
            Files.createDirectory(path);
          } catch (Exception e) {
          }
        }
    }

    private void savefile(MultipartFile file) {
      String filename = getUploadFileName(file.getOriginalFilename());
      Path uploadfile = Paths.get("C:/Users/Education//Desktop/save/" + filename);
      try (OutputStream os = Files.newOutputStream(uploadfile, StandardOpenOption.CREATE)) {
        byte[] bytes = file.getBytes();
        os.write(bytes);
      } catch (IOException e) {
      }
    }

    private void savefiles(List<MultipartFile> multipartFiles) {
        createDirectory();
        for (MultipartFile file : multipartFiles) {
            savefile(file);
        }
    }

    @RequestMapping(path = "/", method = RequestMethod.GET)
    String uploadview(Model model) {
      model.addAttribute("form", new UploadForm());
      return "index";
    }

    @RequestMapping(path = "/upload", method = RequestMethod.POST)
    String upload(Model model, UploadForm form) {
      if (form.getFile()==null || form.getFile().isEmpty()) {
        return "index";
      }
      savefiles(form.getFile());
      return "redirect:/";
    }
    
}




自分で試したこと

html側でリスト形式にし、aタグを使えばでるのかなと思ったのですがそんな簡単なことではなかったです。

0

3Answer

Web サーバー (開発用で可) を使いましょう。

aタグを使えばでるのかなと思ったのですがそんな簡単なことではなかったです。

そのとおりの簡単なことなのですが、pdf ファイルのアップロード先のフォルダを、ブラウザからアクセスできる Web サーバーのフォルダにしてください。

<a href="C:/Users/Education//Desktop/save/examlie.pdf">examlie.pdf</a>

ではダメだと思います。C:/Users/Education/Desktop/save というフォルダに pdf ファイルを保存するのであれば、そのフォルダを Web サーバーの仮想ディレクトリに設定してください。

1Like

ブラウザ依存でよければ

<iframe src="webサーバのパス/examlie.pdf" width="100%" height="600"></iframe>
1Like

Comments

  1. @quint555

    Questioner

    すごいです。
    とても勉強になりました、ありがとうございます。

  2. 横レス失礼します。

    <iframe src="webサーバのパス/examlie.pdf" width="100%" height="600"></iframe>

    でよければ、最初の質問に書いてあった、

    <a href="C:/Users/Education//Desktop/save/examlie.pdf">examlie.pdf</a>

    <a href="webサーバのパス/examlie.pdf">examlie.pdf</a>

    にすれば済むはずです。

Your answer might help someone💌