1

私が使用するコードの問題は、ファイルが blob に表示されますが、0B サイズのファイルとして表示されることです。blob にデータが書き込まれていないかのように。

これは、JSP で使用するフォームです。

<form method="POST" action="UploadServlet" enctype="multipart/form-data" >
    <input type="file" name="file" id="file" /> <br/>
    </br>
    <input type="submit" value="Upload" name="upload" id="upload" />
</form>

そして、サーブレットに次のコードがあります。

    try {
                CloudStorageAccount account;
                CloudBlobClient serviceClient;
                CloudBlobContainer container;
                CloudBlockBlob blob;

                account = CloudStorageAccount.parse(storageConnectionString);
                serviceClient = account.createCloudBlobClient();
                container = serviceClient.getContainerReference("gettingstarted");
                container.createIfNotExist();

                // Set anonymous access on the container.
                BlobContainerPermissions containerPermissions;
                containerPermissions = new BlobContainerPermissions();
                                   containerPermissions.setPublicAccess(BlobContainerPublicAccessType.CONTAINER);
                container.uploadPermissions(containerPermissions);

                FileItemFactory factory = new DiskFileItemFactory();

            ServletFileUpload fileUpload = new ServletFileUpload(factory);

                //process only if its multipart content
                InputStream is = null;
                if (ServletFileUpload.isMultipartContent(request)) {
                    List items = fileUpload.parseRequest(request);
                    Iterator iter = items.iterator();
                    while (iter.hasNext()) {
                        FileItem item = (FileItem) iter.next();
                        if (!item.isFormField()) {
                            is = item.getInputStream();
                            String name = new File(item.getName()).getName();
                            System.out.println(name);
                            blob = container.getBlockBlobReference(name);
                            File fileReference = new File(item.getName());
                            System.out.println(is);
                            blob.upload(is, fileReference.length());
                        }
                    }
                }
                is.close();

                request.getRequestDispatcher("hello").forward(request, response);

    } catch (Exeption e) {
    }
4

1 に答える 1

3

Java での同等の構文はわかりませんが、C# では、ストリーム内の位置をブロブ アップロード メソッドに渡す前に、0 にリセットする必要があることがよくあります (これは通常、ストリームが既に読み取られている場合に当てはまります。長さを取得する必要があります)。何かのようなもの

is.position = 0;
blob.upload(is, fileReference.length());
于 2013-10-09T21:48:42.280 に答える