我有一个简单的网络应用,可让用户将CSV上传到GAE blob存储。我正在尝试将该数据传递给Google Analytics(分析)API方法,但无法解决。遵循教程文档之后,我似乎只能返回响应头中的文件。
有没有办法将blob作为文件直接传递给方法?
或者,是否可以上传Blob,然后将数据映射到Cloud Storage?
最佳答案
如果您按照此处的代码https://cloud.google.com/appengine/docs/java/blobstore/,它将引导您设置上传URL并提供回调URL,等等。当文件被上传并调用回调URL时,您需要记住Blob键,您可以保存在数据存储区中,将其保留在会话中,或者将其保存在会话中以从数据存储区中读取Blob。
下面的代码应该会有所帮助,特别是您感兴趣的方法是getBlobAsString,或者您可以简单地使用blobStream(BlobstoreInputStream blobStream = new BlobstoreInputStream(blobKey);)将文件内容作为InputStream传递给周围
在您的Servlet中处理上传回调
import org.apache.commons.io.IOUtils;
import com.google.appengine.api.blobstore.BlobKey;
import com.google.appengine.api.blobstore.BlobstoreInputStream;
import com.google.appengine.api.blobstore.BlobstoreService;
import com.google.appengine.api.blobstore.BlobstoreServiceFactory;
public class Upload extends HttpServlet {
private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
@Override
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);
BlobKey blobKey = blobs.get("myFile");
if (blobKey != null) {
String keyString = blobKey.getKeyString();
// you can store keyString in the datastore or whatever
// if you want the call the analytics API then you need the blob as string
String csv = getBlobAsString(keyString);
// you can do with csv whatever you like, convert it as an array, etc... then pass it
// over to the analytic API
}
}
public static String getBlobAsString(String keyString) throws IOException {
BlobKey blobKey = new BlobKey(keyString);
BlobstoreInputStream blobStream = new BlobstoreInputStream(blobKey);
return IOUtils.toString(blobStream, "UTF-8");
}
}