Multipart/form-data方式でアップロードピクチャインタフェースを呼び出す
需要:携帯電話クライアントでサーバー側インタフェースを呼び出し、携帯電話の画像をインタフェースが提供するサーバーにアップロードする.
例えば新浪微博の 写真付きの微博を発表します.
注:ここではsockerプログラミングで実現しないほうがいいです.なぜなら、ピクチャが大きすぎると、ピクチャはバイナリ(またはバイト)に解析されるからです.
配列)sockerを介して流れるのが遅く,ネットワークが遅いとタイムアウト異常でインタフェースが呼び出せないことが多い.
成功しました.
実際には、クライアントシミュレーションフォームの提出と同様に、インタフェースが提供するサーバに画像添付ファイルをアップロードすることができます.
新浪とテンセントの微博はすべてこのように実現して、具体的に参考することができます:
新浪微博インターフェース: http://open.weibo.com/wiki/Statuses/upload
テンセント微博インターフェース: http://wiki.open.t.qq.com/index.php/API%E6%96%87%E6%A1%A3/%E5%BE%AE%E5%8D%9A%E6%8E%A5%E5%8F%A3/%E5%8F%91%E8%A1%A8%E4%B8%80%E6%9D%A1%E5%B8%A6%E5%9B%BE%E7%89%87%E7%9A%84%E5%BE%AE%E5%8D%9A
私の実装コードは以下の通りです(テストに合格しました):クライアント呼び出しコード:
サーバ側コード:
例えば新浪微博の 写真付きの微博を発表します.
注:ここではsockerプログラミングで実現しないほうがいいです.なぜなら、ピクチャが大きすぎると、ピクチャはバイナリ(またはバイト)に解析されるからです.
配列)sockerを介して流れるのが遅く,ネットワークが遅いとタイムアウト異常でインタフェースが呼び出せないことが多い.
成功しました.
実際には、クライアントシミュレーションフォームの提出と同様に、インタフェースが提供するサーバに画像添付ファイルをアップロードすることができます.
新浪とテンセントの微博はすべてこのように実現して、具体的に参考することができます:
新浪微博インターフェース: http://open.weibo.com/wiki/Statuses/upload
テンセント微博インターフェース: http://wiki.open.t.qq.com/index.php/API%E6%96%87%E6%A1%A3/%E5%BE%AE%E5%8D%9A%E6%8E%A5%E5%8F%A3/%E5%8F%91%E8%A1%A8%E4%B8%80%E6%9D%A1%E5%B8%A6%E5%9B%BE%E7%89%87%E7%9A%84%E5%BE%AE%E5%8D%9A
私の実装コードは以下の通りです(テストに合格しました):クライアント呼び出しコード:
package com.common.myTest;
import java.io.File;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
public class Hclient {
public static void main(String args[]) {
String targetURL = null; //-- URL
File targetFile = null; //--
targetFile = new File("D:\\image1\\ .jpg");
targetURL = "http://localhost:8080/servlet/HServlets"; // servleturl
PostMethod filePost = new PostMethod(targetURL);
try {
//
Part[] parts = { new FilePart(targetFile.getName(), targetFile) };
filePost.setRequestEntity(new MultipartRequestEntity(parts,
filePost.getParams()));
HttpClient client = new HttpClient();
client.getHttpConnectionManager().getParams().setConnectionTimeout(
5000);
int status = client.executeMethod(filePost);
if (status == HttpStatus.SC_OK) {
System.out.println(" ");
//
} else {
System.out.println(" ");
//
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
filePost.releaseConnection();
}
}
}
サーバ側コード:
package com.common.myTest;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class HServlets extends HttpServlet {
private Log log = LogFactory.getLog(HServlets.class);
private static final long serialVersionUID = 1L;
private String uploadPath; //
private String tempPath; //
File tempPathFile;
public void init(ServletConfig config) throws ServletException {
super.init(config);
uploadPath = config.getServletContext().getInitParameter("imageStorePath");
tempPath = config.getServletContext().getInitParameter("images_120");
File uploadFile = new File(uploadPath);
if (!uploadFile.exists()) {
uploadFile.mkdirs();
}
File tempPathFile = new File(tempPath);
if (!tempPathFile.exists()) {
tempPathFile.mkdirs();
}
}
@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
log.info(" servlt");
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096); // , 4kb
factory.setRepository(tempPathFile);//
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(4194304); // , 4MB
List<FileItem> items = upload.parseRequest(request);//
Iterator<FileItem> i = items.iterator();
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
String fileName = fi.getName();
log.info(" :"+fileName);
if (fileName != null) {
File fullFile = new File(fi.getName());
File savedFile = new File(uploadPath, fullFile.getName());
fi.write(savedFile);
}
}
log.info(" !");
} catch (Exception e) {
log.info(e.getMessage());
//
e.printStackTrace();
}
}
}