通过发送请求向google appengine发送文件信息

时间:2013-12-05 12:37:03

标签: java google-app-engine

我正在尝试编写一个接收文件的Google Appengine Post程序。

我观察到我得到了六个字节的内容长度,这就是客户端 发送。但是,我无法获得内容。当我尝试从getInputStream中读取时 我第一次得到-1。 (我也尝试读入六个字节的ByteArray,并且 同样,我在缓冲区中什么都没得到。)

package guestbook;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.http.*;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import java.util.logging.Logger;
public class XStore extends HttpServlet {
  public void doPost (HttpServletRequest req, HttpServletResponse resp) throws
     IOException {
    Logger log = Logger.getLogger(XStore.class.getName());
     String ct;
     ct=req.getContentType();
     resp.setContentType("text/plain");
     String key = req.getParameter("key");
     String value = req.getParameter("value");
     DatastoreService d = DatastoreServiceFactory.getDatastoreService();
     byte [] B;
     InputStream IS = req.getInputStream();
int i,le;
le = req.getContentLength(); 
StringBuffer rB = new StringBuffer();
int rv;
int c;
c = IS.read();
log.info("Srv = " + c ); 

这会返回-1的日志 ...为简洁省略了其余的程序 我的显示也表明le是六。

这是客户端

import java.net.*;
import java.io.*;
public class client {
public static void main (String a []  ) throws MalformedURLException,java.io.IOException,ProtocolException {
URL u = new URL("http://uthreee.appspot.com/XX?key=a&value=a");
HttpURLConnection H;
H = (HttpURLConnection) u.openConnection();
H.setRequestMethod("POST");
H.setDoOutput(true);
OutputStreamWriter w = new OutputStreamWriter(H.getOutputStream());
w.write("abc");
w.write("def");
w.close();
System.out.println(H.getResponseCode());
}}

请注意,响应代码为200。 感谢您的任何见解。一个学生和我一起度过了十多个小时 试图找到一种方法将XML文件传输到Google Appengine,但是 找不到一种方法来读取客户发送的信息(最终 将是一个Android应用程序。)

博士。 Laurence Leff计算机科学副教授, 西伊利诺伊大学,马科姆IL 61455在休假

1 个答案:

答案 0 :(得分:0)

对于它的价值,使用包含< input type ="文件">的浏览器表单,Apache Commons FileUpload肯定适用于AppEngine。在我的情况下,表单似乎需要enctype =" multipart / form-data"属性,当然还有方法=" post"。