1. 程式人生 > >使用okhttp上傳檔案---單檔案或多檔案

使用okhttp上傳檔案---單檔案或多檔案

資源連結:http://download.csdn.net/detail/baidu_24278081/9820885

伺服器端程式碼---使用spring mvc

@RequestMapping("addPicture")
public void addPicture(HttpSession session,HttpServletRequest request,HttpServletResponse response){
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=utf-8");
PrintWriter printWriter = null;
try {
printWriter = response.getWriter();
long startTime=System.currentTimeMillis();
//將當前上下文初始化給  CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
request.getSession().getServletContext());
//檢查form中是否有enctype="multipart/form-data"
if(multipartResolver.isMultipart(request)){
//將request變成多部分request
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;

//獲取multiRequest 中所有的檔名
Iterator iter=multiRequest.getFileNames();
int i = 0;
while(iter.hasNext())
{
//一次遍歷所有檔案
MultipartFile file=multiRequest.getFile(iter.next().toString());
System.out.println(i++);
if(file!=null){
String fileName = file.getOriginalFilename();

//獲取picture資料夾路徑 
String path = session.getServletContext().getRealPath("picture");


//上傳到指定路徑
new File(path).mkdirs();
file.transferTo(new File(path+"/"+fileName));
}
}

printWriter.print(1);
printWriter.flush();
}else{
printWriter.print(0);
printWriter.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if (printWriter!=null) {
printWriter.close();
}
}
}

android端程式碼:

MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
for (int i = 0; i <selected.size() ; i++) {
   File f=new File(selected.get(i).getOriginalPath());
   if (f!=null) {
      Toast.makeText(PhotoSelectorActivity.this, ":"+selected.get(i).getOriginalPath(), Toast.LENGTH_SHORT
).show(); //新增檔案 builder.addFormDataPart(f.getName(), f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f)); } } //新增普通資料 builder.addFormDataPart("time","demo"); MultipartBody requestBody = builder.build(); Request request = new Request.Builder() .url("http://ip:埠/專案名/addPicture.do") .post(requestBody) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e("musiclistpulldown", "failure"); } @Override public void onResponse(Call call, Response response) throws IOException { Message msg = handler.obtainMessage(); msg.what = 1; handler.sendMessage(msg); } });

問題:

//新增檔案
builder.addFormDataPart(f.getName(), f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f));
其中第一個引數   f.getName  可以取相同值嗎?我這裡測試取相同值時,只上傳了第一張圖片

eg:

//新增檔案
builder.addFormDataPart(“file”, f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f));