3

次のシナリオで少し迷っています:

  1. ユーザーアップロード画像 - upload.jsp (multipart/form-data)
  2. サーブレットはすべてのダーティ ジョブを実行します (画像の保存、名前の取得、名前の保存、display.jsp へのリダイレクト)
  3. display.jsp では、アップロードしたばかりの画像を表示する必要があります

残念ながら、display.jsp ページは空です。Firefox でソース ページを見ると、すべて問題ないように見えます。画像への有効なリンクが提供されています。

<img src="/UploadTest/avatar/55_445194458350473498.png" border=0 width="48px" height="48px"/>

しかし、メディア情報の下に、いくつかの奇妙な情報が表示されます。

Location:   http://localhost:8084/UploadTest/avatar/55_445194458350473498.png
Type:       text/html
Size:       Unknown (not cached)
Dimensions: 0px x 0px (scaled to 0px x 16px)

画像のアップロード、処理、表示に使用されるコードは次のとおりです。

アップロード.jsp

<form action="Upload" method="post" enctype="multipart/form-data">
  <label for="file">File:</label>
  <input type="file" id="file" name="file">
  <input type="submit" value="submit">
</form>

Upload.java

(MultipartMap サーブレットは BalusC に属します。http://balusc.blogspot.com.au/2009/12/uploading-files-in-servlet-30.html )

package test;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import test.MultipartMap;


@WebServlet(urlPatterns = { "/Users/Thomas/NetBeansProjects/UploadTest/web/Upload" })
@MultipartConfig(location = "/Users/Thomas/NetBeansProjects/UploadTest/web/avatar", maxFileSize = 10485760L) // 10MB.
public class UploadServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {  
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {

    MultipartMap map = new MultipartMap(request, this);

    File file = map.getFile("file");

    String filename = file.getName();

    HttpSession session = request.getSession();
    session.setAttribute("filename", filename);

    request.getRequestDispatcher("/display.jsp").forward(request, response);
    }
}

display.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
  </head>
  <body>
      <div>
          <img src="${pageContext.request.contextPath}/avatar/${filename}" border=0 width="48px" height="48px"/>
      <div>
  </body>
</html>

display.jsp の ${filename} を以前にアップロードした特定の画像の静的な名前に置き換えると、表示に問題はないので、画像は正しく処理されていると思いますが、前方に何かが欠けているだけですか?

ちなみに、デバッガーがアクティブなときはすべて問題ありませんが、スイッチをオフにすると問題が再発します。

乾杯、

トーマス

4

2 に答える 2

0

良い説明。私はあなたの問題を調べて、そのサンプルを作成します。私はあなたが直面しているのと同じ問題を抱えています。解決策は、display.jsp ファイルに次の行を追加することです。

<%@page isELIgnored="false" %>

ELとページの問題が正しく評価できていないと思います。以下はコードです:upload.jspとupload.javaはあなたのものと同じです。

display.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page isELIgnored="false" %>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
  </head>
  <body>
      <div>
          <img src="${pageContext.request.contextPath}/images/${filename}" border=0 width="48px" height="48px" alt="Image Not found"/>
      <div>
  </body>
</html>

これがあなたにも役立つことを願っています

ありがとうございました

于 2012-09-29T09:25:21.083 に答える
-1

アップロードした画像を pic Viewer で表示できますか?

ファイルサイズは正しく、データは壊れていませんか?

サーバーはポート 8084 で実行されていますか?

image/png である必要があるのに、なぜ text/html を取得するのだろうか。

于 2012-09-29T06:23:21.837 に答える