AppEngine - отправляет файлы в интернет-магазин, используя HTTP - PullRequest
4 голосов
/ 10 января 2011

Я пытаюсь отправить файлы в хранилище с помощью http-запросов.

Сначала я создал кнопку для вызова createUploadUrl, чтобы получить URL для загрузки.

Тогда я сделал клиент:

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(URL_FROM_CREATEUPLOADURL);

httpPost.setEntity(new StringEntity("value1"));
HttpResponse httpResponse = httpClient.execute(httpPost);

Но у меня есть 2 проблемы:

  • В режиме разработки: когда я запускаю клиент, он отвечает «Сначала необходимо вызвать один из set * BlobStorage ()».

  • Если я загружаю приложение: URL-адрес меняется каждый раз, когда я его вызываю, поэтому при запуске клиента он отвечает «HTTP / 1.1 500 Internal Server Error»

Что я делаю не так?

Ответы [ 2 ]

5 голосов
/ 13 января 2011

очевидно, что сущность должна быть 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();

Это код сервера для возврата URL:

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
String uploadUrl = blobstoreService.createUploadUrl(requestHandlerServlet);
resp.addHeader("uploadUrl", uploadUrl);

Это код загрузки клиента:

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);

так просто ...: (

5 голосов
/ 11 января 2011

Похоже, вы пытаетесь жестко закодировать один URL для загрузки. Вы не можете этого сделать - вам нужно создать новый файл для каждого файла, который вы хотите загрузить.

Вам также необходимо убедиться, что вы загружаете файл как составное сообщение, а не используете форменкодинг или необработанное тело. Я не знаком с API Java, но похоже, что вы устанавливаете необработанное тело запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...