[英]Uploading to BlobStore in Google App Engine from a Command Line Java Application
這是我的Blobstore上傳命令行應用程序的服務器端代碼:
public class UploadServlet extends HttpServlet
{
private static final Logger log = Logger.getLogger(UploadServlet.class.getName());
private final BlobstoreService bs = BlobstoreServiceFactory.getBlobstoreService();
protected void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException
{
final Map<String, BlobKey> blobs = bs.getUploadedBlobs(request);
final BlobKey blobKey = blobs.get("blob");
if (blobKey == null)
{
log.severe("BlobKey was null!");
response.sendRedirect("/error.html");
}
else
{
response.sendRedirect("/image?blob-key=" + blobKey.getKeyString());
}
}
/**
* Generates the custom single use blobstore URL's that are needed to upload to the blobstore programmatically. */
protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException
{
final String uploadURL = bs.createUploadUrl("/upload");
final PrintWriter pw = response.getWriter();
response.setContentType("text/plain");
pw.write(uploadURL);
}
}
我已經獲得了以下代碼,可以在沒有身份驗證代碼的情況下針對我的本地開發模式服務器工作,因此我知道multipart/form
代碼可以正常工作,但使用身份驗證代碼卻失敗了:
r = opener.open(request)
File "C:\Python26\lib\urllib2.py", line 397, in open
response = meth(req, response)
File "C:\Python26\lib\urllib2.py", line 510, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python26\lib\urllib2.py", line 435, in error
return self._call_chain(*args)
File "C:\Python26\lib\urllib2.py", line 369, in _call_chain
result = func(*args)
File "C:\Python26\lib\urllib2.py", line 518, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 302: Found
從Java移至Python,用於命令行客戶端:
f = urllib2.urlopen('http://myapp.appspot.com/upload')
bloburl = f.read(1024)
print bloburl
print
image = file('120.jpg', 'r')
form = MultiPartForm()
form.add_file('blob', 'blob', image, 'image/jpeg')
request = urllib2.Request(bloburl)
body = str(form)
request.add_header('Content-type', form.get_content_type())
request.add_header('Content-length', len(body))
request.add_data(body)
opener = auth.get_auth_opener('myapp', 'username', 'password')
r = opener.open(request)
data = r.read()
print data
我只想要一個簡單的命令行工具,該工具接受一個文件並將其發布到BlobStore。 我在互聯網上的任何地方都找不到完整的示例。 有許多示例可以在GAE上完成所有工作,但沒有一個示例是命令行客戶端,它們從單獨的客戶端執行FORM
的POST
。
從1.4.3版開始,有一個實驗性API可直接寫入blobstore。
它使您無需使用POST上傳到blobstore。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.