使用HTTP Post multipart - 4Sharing API J2ME上传文件

时间:2013-11-08 03:20:49

标签: java java-me multipartform-data

我目前正在开发一个J2ME应用程序。我在文件上传时遇到问题。我似乎不知道我的代码的哪一部分是错的。这是我的代码:

public void UploadImage(long newFileId, String url, String bytes){
    HttpConnection conn = null;
      OutputStream os = null;
      InputStream s = null;
      StringBuffer responseString = new StringBuffer();


      try
      {

         System.out.println(System.getProperty("HTTPClient.dontChunkRequests"));
         conn.setRequestMethod(HttpConnection.POST);
         conn = (HttpConnection)Connector.open(url);
         conn.setRequestProperty("resumableFileId", ""+newFileId);
         conn.setRequestProperty("resumableFirstByte", ""+0);
         conn.setRequestProperty("FilePart", bytes);


         // Read

         s = conn.openInputStream();
         int ch, i = 0, maxSize = 16384;
         while(((ch = s.read())!= -1 ) & (i++ < maxSize)) 
         {
            responseString.append((char) ch);
         }

         conn.close();
         System.out.println(responseString.toString());
         String res = uploadFinishFile(newFileId, bytes);
         if(res.length()>0)
             System.out.println("File uploaded.");
         else
           System.out.println("Upload failed: "+res);
      }
      catch (Exception e)
      {
          System.out.println(e.toString());
      }


}

这是我试图转换为j2me的java代码:

try {
  HttpClient client = new DefaultHttpClient();
  HttpPost post = new HttpPost(url);
  MultipartEntity me = new MultipartEntity();
  StringBody rfid = new StringBody("" + newFileId);
  StringBody rfb = new StringBody("" + 0);
  InputStreamBody isb = new InputStreamBody(new BufferedInputStream(new FileInputStream(f)), "FilePart");
  me.addPart("resumableFileId", rfid);
  me.addPart("resumableFirstByte", rfb);
  me.addPart("FilePart", isb);

  post.setEntity(me);
  HttpResponse resp = client.execute(post);
  HttpEntity resEnt = resp.getEntity();

  String res = da.uploadFinishFile(login, password, newFileId, DigestUtils.md5Hex(new FileInputStream(f)));
  if(res.isEmpty())
  System.out.println("File uploaded.");
  else
    System.out.println("Upload failed: "+res);
} catch (Exception ex) {
  System.out.println("Upload failed: "+ex.getMessage());
}

1 个答案:

答案 0 :(得分:1)

您正在上传将参数作为HTTP标头传递的文件,而不是使用多部分文件上传在HTTP邮件正文中发送图像,与您要转换的代码兼容。

看看HTTP Post multipart file upload in Java ME。您可以使用HttpMultipartRequest类并将代码更改为:

Hashtable params = new Hashtable();
params.put("resumableFileId", "" + newFileId);
params.put("resumableFirstByte", "" + 0);

HttpMultipartRequest req = new HttpMultipartRequest(
    url,
    params,
    "FilePart", "original_filename.png", "image/png", isb.getBytes()
);

byte[] response = req.send();