dav*_*vid 4 google-app-engine http blobstore
我正在尝试使用http请求将文件发送到blobstore.
首先,我创建了一个按钮来调用createUploadUrl来获取上传URL.
然后我做了一个客户:
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(URL_FROM_CREATEUPLOADURL);
httpPost.setEntity(new StringEntity("value1"));
HttpResponse httpResponse = httpClient.execute(httpPost);
Run Code Online (Sandbox Code Playgroud)
但我有两个问题:
在开发模式下:当我运行客户端时,它首先响应"必须调用set*BlobStorage()之一".
如果我上传应用程序:每次调用时网址都会更改,因此当我运行客户端时,它会响应"HTTP/1.1 500内部服务器错误"
我做错了什么?
听起来您正在尝试对单个上传URL进行硬编码.你不能这样做 - 你需要为你想上传的每个文件生成一个新的.
您还需要确保将文件作为多部分邮件上载,而不是使用formencoding或raw body.我不熟悉Java API,但看起来你正在设置请求的原始主体.
显然,该实体必须是MultiPartEntity.
这是获取URL的客户端代码:
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(myDomain/mayServlet);
HttpResponse httpResponse = httpClient.execute(httpPost);
Header[] headers = httpResponse.getHeaders(myHeader);
for (int i = 0; i < headers.length; i++) {
Header header = headers[i];
if(header.getName().equals(myHeader))
uploadUrl = header.getValue();
Run Code Online (Sandbox Code Playgroud)
这是返回URL的服务器代码:
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
String uploadUrl = blobstoreService.createUploadUrl(requestHandlerServlet);
resp.addHeader("uploadUrl", uploadUrl);
Run Code Online (Sandbox Code Playgroud)
这是客户端上传代码:
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(uploadUrl);
MultipartEntity httpEntity = new MultipartEntity();
ContentBody contentBody = new FileBody(new File("filePath/fileName"));
httpEntity.addPart("fileKey", contentBody);
httpPost.setEntity(httpEntity);
HttpResponse httpResponse = httpClient.execute(httpPost);
Run Code Online (Sandbox Code Playgroud)
太简单... :(
| 归档时间: |
|
| 查看次数: |
2600 次 |
| 最近记录: |