Загрузка файлов через JSON Post запрос в веб-сервис, предоставленный Teambox - PullRequest
0 голосов
/ 26 июня 2011

Пожалуйста, обратитесь к (выглядит довольно простой документацией): https://teambox.com/api/upload

Параметры, которые я должен передать как JSON:

{
  "page_id": 456,
  "project_id": 123,
  "name": "Name",
  "asset": "<File Data>"
}

на URL: /api/1/uploads

Я предположил, что я должен передать закодированный запрос формы вместо данных файла выше.Но я получаю сообщение об ошибке: / api / 1 / uploads вернул статус ответа 422 null

Так вот мой код:

Форма

     <FORM  ENCTYPE="multipart/form-data" ACTION=
"up.jsp" METHOD=POST>
                <br><br><br>
          <center><table border="2" >
                    <tr><center><td colspan="2"><p align=
"center"><B>PROGRAM FOR UPLOADING THE FILE</B><center></td></tr>
                    <tr><td><b>Choose the file To Upload:</b>
</td>
                    <td><INPUT NAME="F1" TYPE="file"></td></tr>
                                        <tr><td colspan="2">
<p align="right"><INPUT TYPE="submit" VALUE="Send File" ></p></td></tr>
             <table>
     </center>      
     </FORM>

up.jsp

<%@ page import="java.io.*" %>
<%@ page import="com.sun.jersey.api.client.*" %>
<%@ page import="com.sun.jersey.api.client.filter.*" %>
<%@ page import="com.google.gson.*" %>
<%@ page import="OtherClasses.UploadFile" %>
<%  
         StringBuffer inputLine = new StringBuffer();
         try 
         {
            DataInputStream dis = new DataInputStream(new   DataInputStream(request.getInputStream()));
            String tmp; 
            while ((tmp = dis.readLine()) != null) {
                inputLine.append(tmp);
                //System.out.println(tmp);
            }
            dis.close();
        } 
        catch (IOException ioe) {
            System.out.println("IOException: " + ioe);
        }
        String encodedRequest = inputLine.toString();
        out.print(encodedRequest);

                Client client = Client.create(); 
        client.addFilter(new HTTPBasicAuthFilter("username", "password"));
        WebResource webResource = client.resource("http://my-server-ip:3000");

        UploadFile file = new UploadFile();
        file.setAsset(encodedRequest);
        file.setName("Afile");
        file.setPage_id("2");//404 error if page doesn't exist.
        file.setProject_id("1");

        ClientResponse r = webResource.path("/api/1/uploads").type("application/json").post(ClientResponse.class,new Gson().toJson(file));
        System.out.println(r);



%>

Я получаю код ошибки ответа 422. Пожалуйста, предложите что-нибудь.Что я мог попробовать?Спасибо

1 Ответ

0 голосов
/ 26 июня 2011

Что вам нужно сделать, это использовать библиотеку выгрузки файлов (например, Загрузка файла Commons ) для извлечения фактического содержимого файла (в отличие от всего тела запроса), а затем base64 кодировать файл в asset поле.

Кроме того, документация по API довольно плоха: они говорят "<File Data>" и кодируют форму, но не дают значимых примеров. Я почти уверен, что то, что вы сделали (что читается во всем HTTP-запросе и сохраняется как поле asset), не будет работать.

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