2014-03-26 24 views
3

是否可以将文件附件嵌入到JSON对象中?我有一个HTML表单,它有几个文本字段输入和一个文件附件。我想发送一个包含所有这些表单数据(包括文件附件)的JSON对象到服务器。在JSON对象中嵌入文件附件

Java中是否有任何特定的库可以做到这一点?你能为此提供可能的解决方案吗?

感谢

+0

http://stackoverflow.com/questions/1443158/binary-data-in-json-string-something-better-than-base64 – Jonline

回答

4

如果你要发送的文件的实际数据,你可能希望将其编码为Base64字符串,并发送你的JSON - 看到小提琴,例如在JavaScript编码它的:

http://jsfiddle.net/eliseosoto/JHQnk/

那么你可以做使用任何语言和/或图书馆适用于服务器端的对面。

+0

编码为base64也将受到〜增加文件大小33%,但如果你确定,这是完成工作的一个非常简单的方法。 – Yuval

+0

@YuvalBoss我想你是对的。这是一个问题。较大的文件附件创建庞大的JSON对象。这是一个缺点。就我提出的问题而言,这似乎是正确的答案,并且工作起来。 –

1

使用MultipartEntity,别人发布了类似的问题:How to send file in JSON on android? 您也可以考虑将文件保存在服务器上,并将路径/ URL发送到其他服务器可以访问它们的文件位置。

public String SendToServer(String aUrl,File Filename) 
     { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(filename); 

      try 
      { 
       MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
       entity.addPart("file", new FileBody(Filename)); 
       entity.addPart("video-title", new StringBody("Video")); 
       entity.addPart("video-type", new StringBody("1")); 
       httpPost.setEntity(entity); 

       HttpContext context = new BasicHttpContext(); 
       // Bind custom cookie store to the local context 
       context.setAttribute(ClientContext.COOKIE_STORE, Globals.sessionCookie); 

       HttpResponse response = httpClient.execute(httpPost, context); 
       HttpEntity resEntity = response.getEntity(); 
       String Response = ""; 
       if (response != null) 
       {  
        Response = EntityUtils.toString(resEntity); 
       } 
       return Response; 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 

      return "Exception"; 
     } 
+0

我想就可持续解决方案而言,将文件上传到文件服务器并将文件url与请求进行映射是一个不错的选择。感谢您的建议。 –