JavaWeb从入门到放弃(9)-实现一个客户端上传文件到服务端
2017-11-03 15:28
661 查看
先上移动端代码:retrofit+rxjava
服务端代码:
注:保存的地址是固定的C/picture;如果需要让外部可以通过url来访问图片,见博客http://blog.csdn.net/shb2058/article/details/77520925
注:这里的代码有一个判断,看移动端代码,发现这个判断好像没用?其实这个判断是做传文件时候还传其他键值对数值的时候
Map<String, String> map = new HashMap<>(); File file = new File(Environment.getExternalStorageDirectory(), "DebugData/pic.jpeg"); RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestFile); OkHttpClient client = new OkHttpClient.Builder(). connectTimeout(60, TimeUnit.SECONDS). readTimeout(60, TimeUnit.SECONDS). writeTimeout(60, TimeUnit.SECONDS).build(); Retrofit retrofit = new Retrofit.Builder().baseUrl("http://shb2058.free.ngrok.cc") .addConverterFactory(StringConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .client(client) .build(); RetrofitInterface httpApiS = retrofit.create(RetrofitInterface.class); httpApiS.updateImage(part) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<String>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull String loginBean) { Log.e("返回的数据", loginBean); TextView tt = (TextView) findViewById(R.id.ttt); tt.setText(loginBean); } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } });
@Multipart @POST("/Practice_Project/MyServlet") Observable<String> updateImage(@Part MultipartBody.Part file);
服务端代码:
注:保存的地址是固定的C/picture;如果需要让外部可以通过url来访问图片,见博客http://blog.csdn.net/shb2058/article/details/77520925
DiskFileItemFactory factory =new DiskFileItemFactory(); //得到绝对文件夹路径,比如"D:\\Tomcat6\\webapps\\test\\upload" String path = request.getRealPath("/upload"); //临时文件夹路径 String repositoryPath =request.getRealPath("/upload/temp"); // 设定临时文件夹为repositoryPath factory.setRepository(new File(repositoryPath)); // 设定上传文件的阈值,如果上传文件大于1M,就可能在repository // 所代 表的文件夹中产生临时文件,否则直接在内存中进行处理 factory.setSizeThreshold(1024* 1024); // 创建一个ServletFileUpload对象 ServletFileUpload uploader =new ServletFileUpload(factory); try { // 调用uploader中的parseRequest方法,可以获得请求中的相关内容, // 即一个FileItem类型的ArrayList。FileItem是在 // org.apache.commons.fileupload中定义的,它可以代表一个文件, // 也可以代表一个普通的form field ArrayList<FileItem>list = (ArrayList<FileItem>)uploader.parseRequest(request); System.out.println(list.size()); for(FileItem fileItem : list) { if(fileItem.isFormField()) // 如果是普通的form field { String name = fileItem.getFieldName(); String value = fileItem.getString(); System.out.println(name+ " = " + value); } else // 如果是文件 { String value = fileItem.getName(); System.out.print("收到的文件名字"+value); // 名为fileName的文件中 fileItem.write(new File("c:/picture/test.jpeg")); } } } catch(Exception e) { e.printStackTrace(); } PrintWriter out = response.getWriter(); out.write("上传成功"); out.close(); out = null;
注:这里的代码有一个判断,看移动端代码,发现这个判断好像没用?其实这个判断是做传文件时候还传其他键值对数值的时候
相关文章推荐
- 36、Java入门—Socket实例之客户端向服务端数据库上传文件UI版
- java实现的客户端向服务端上传文件的程序
- java实现服务端守护进程来监听客户端通过上传json文件写数据到hbase中
- 文件上传简单服务端和客户端 Java 实现
- 用 TCP 协议写一个客户端和一个服务端,实现上传文件
- VB.NET客户端调用Axis的Java Web Service实现文件上传
- 用 TCP 协议写一个客户端和一个服务端,实现上传文件
- 如何实现一个通用的IHttpHandler 万能的IHttpHandler HttpWebRequest文件上传
- python socket上传文件的服务端和客户端实现
- 使用CGIC实现Web文件上传的服务端代码
- java struts2入门学习实例--使用struts2快速实现多个文件上传
- Java客户端通过Http发送POST请求上传文件到web服务器
- Python socket上传文件的服务端和客户端实现
- 用Java实现简单的文件上传服务器和客户端
- c#服务端接收客户端的文件上传,可以实现到断点续传
- java实现web文件无刷新上传(二)
- java实现web文件无刷新上传(一)
- java通过struts实现web中的文件上传
- python socket上传文件的服务端和客户端实现
- 【java实现web文件无刷新上传】