使用okhttp上传文件---单文件或多文件

本文详细介绍了如何使用SpringMVC进行多文件上传的操作过程,包括服务器端代码实现及Android客户端调用流程,并针对上传过程中遇到的问题进行了分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

资源链接:http://download.youkuaiyun.com/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));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值