簡體   English   中英

如何使用Google App Engine在Servlet中以Blob形式上傳文件

[英]how to get uploaded file as blobs in servlet using google app engine

我可以使用以下代碼將文件上傳為Blob,

<form action="<%= blobstoreService.createUploadUrl("/upload") %>" method="post" enctype="multipart/form-data">
<input type="file" name="myFile">
<input type="submit" value="Submit">
</form>

但就我而言,我正在使用Apache Common File Uploader上傳文件。 所以我的表單動作如下

<form action="/upload" method="post" enctype="multipart/form-data">

現在在我的servlet中,正在將文件作為InputStream獲取。 如果我想將文件轉換為同一servlet文件中的blob,該如何轉換。 請給我一個主意。

更新

我嘗試了將文件寫入Blob存儲我的代碼,如下所示,

FileService fileService = FileServiceFactory.getFileService();
AppEngineFile file = fileService.createNewBlobFile(mime,fileName);
boolean lock = true;
FileWriteChannel writeChannel = fileService.openWriteChannel(file, lock);
byte[] b1 = new byte[BUFFER_SIZE];
int readBytes1 = is.read(b1, 0, BUFFER_SIZE);
while (readBytes1 != -1) {
writeChannel.write(ByteBuffer.wrap(b1, 0, BUFFER_SIZE));}

現在,我可以在App Engine中上傳文件,它存儲Blob值,但我無法查看Blob值。 當我使用<%= blobstoreService.createUploadUrl("/upload") %>此行時,我的應用程序引擎向我顯示“查看Blob”選項,但現在不存在。此外,當我使用Blob列表查看文件時,它不顯示並說“ 0”字節。 我認為它只是存儲Blob鍵,而不存儲文件。 請給我一個解決方案。

有兩種方法可以做到這一點:

  1. 使用提供的blobstore上傳功能 :您的客戶端調用服務器,該服務器回復一次上傳URL(通過blobstoreService.createUploadUrl("/upload") )。 然后,您可以將該URL一次性與Apache Common File Uploader一起使用。

  2. 處理代碼中的上載: 創建一個多部分處理程序 ,然后通過Files API以編程方式將數據保存到blobstore

請注意,選項2屬於標准GAE 32Mb請求/響應大小限制。 選項1.的文件上傳限制為2Gb。

做這樣的事情:

        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(maxPostSize);

        for (FileItemIterator it = upload.getItemIterator(request); it.hasNext();) {
            FileItemStream item = it.next();
            final byte[] fileData = IOUtils.toByteArray(item.openStream());

            // store data

        }

現在將fileData存儲在數據存儲中。 確保使用item.isFormField()檢查item是否為表單字段。

或查看Streaming API

假設您具有表單字段<input type="file" name="myFile"> ,則將文件存儲在Blobstore中的操作如下

Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(request);
BlobKey blobKey = blobs.get("myFile");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM