2

ユーザー入力ファイルを処理し、そのモデルをデータストアに保存し、モデルの処理後に任意の形式でファイルをダウンロードできるようにするGoogle App Engineアプリを構築しています。そのため、ダウンロードリンクを作成する必要があります。処理されたファイル。

Pythonで何かを見つけましたが、その動作に慣れていません。

Javaでやる必要があります。どんな助けでも大歓迎です。それをカバーするコードは素晴らしいです。

4

1 に答える 1

3

これはjspファイルです

<%@ page import="com.google.appengine.api.blobstore.BlobstoreServiceFactory" %>
<%@ page import="com.google.appengine.api.blobstore.BlobstoreService" %>

<%
    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
%>


<html>
<head>
    <%@ page
            language="java"
            contentType="text/html; charset=UTF-8"
            pageEncoding="UTF-8"
            %>
    <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Upload Test</title>
</head>
<body>
<form action="<%= blobstoreService.createUploadUrl("/upload") %>" method="post" enctype="multipart/form-data">
<table>
    <tr>
        <p>Bir seferde maksimum 20 dosya yükleyebilirsiniz.</p>
    </tr>
    <tr>
        <td><input type="file" name="myFile" multiple="multiple" size="20" style="width: 522px;"></td>
    </tr>
    <tr>
        <td>
            <input type="submit" value="Yükle">
        </td>
    </tr>
</table>
</form>
</body>
</html> 

これは対応するサーブレットです

public class UploadDocument extends HttpServlet {
    private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

    public void doPost(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {

        Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(req);
        List<BlobKey> blobKeys = blobs.get("myFile");

        if (blobKeys == null) {
            res.sendRedirect("/");
        } else {

            res.sendRedirect("/serve?blob-key=" + blobKeys.get(0).getKeyString());
        }
    }


}

これはサーブレットをダウンロードしています

public class ShowImage extends HttpServlet {
    private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        doPost(req, res);
    }

    public void doPost(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        String par = req.getParameter("name");
        if (par != null) {
            Query query = new Query("__BlobInfo__");
            query.addFilter("filename", Query.FilterOperator.EQUAL, req.getParameter("name"));

            DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
            PreparedQuery pq = datastore.prepare(query);
            List<Entity> entList = pq.asList(FetchOptions.Builder.withLimit(1));
            if (entList.size() > 0) {
                BlobKey blobKey = new BlobKey(entList.get(0).getKey().getName());
                BlobInfoFactory bi = new BlobInfoFactory();
                String fname = bi.loadBlobInfo(blobKey).getFilename();
                if (fname.contains(".jpg") || fname.contains(".JPG") || fname.contains(".jpeg") ||
                        fname.contains(".JPEG") || fname.contains(".png") || fname.contains(".PNG") ||
                        fname.contains(".GIF") || fname.contains(".gif") || fname.contains(".BMP") ||
                        fname.contains(".bmp")) {
                    res.setContentType("application/octet-stream");
                    res.setHeader("Content-Type", "save as filename=" + fname);
                    ImagesService imagesService = ImagesServiceFactory.getImagesService();

                    Image oldImage = ImagesServiceFactory.makeImageFromBlob(blobKey);
                    Transform resize = ImagesServiceFactory.makeResize(580, 270,true);

                    Image newImage = imagesService.applyTransform(resize, oldImage);

                    byte[] newImageData = newImage.getImageData();
                    OutputStream outputStream = res.getOutputStream();
                    outputStream.write(newImageData);
                } else {
                    res.setContentType("application/x-download");
                    res.setHeader("Content-Disposition", "attachment; filename=" + fname);
                    blobstoreService.serve(blobKey, res);
                }


            } else {
                res.setContentType("text/plain");
                res.setCharacterEncoding("UTF-8");
                res.getOutputStream().write("Bu isimde bir dosya bulunamadı".getBytes());
            }
        } else {

            res.setContentType("text/plain");
            res.setCharacterEncoding("UTF-8");
            res.getOutputStream().write("Lütfen parametre giriniz. Örnek: name=resim.jpg".getBytes());
        }
    }
}
于 2012-10-20T16:37:36.080 に答える