java文件上传,客户端和服务器端.docx

上传人:小飞机 文档编号:3061317 上传时间:2023-03-10 格式:DOCX 页数:13 大小:40.99KB
返回 下载 相关 举报
java文件上传,客户端和服务器端.docx_第1页
第1页 / 共13页
java文件上传,客户端和服务器端.docx_第2页
第2页 / 共13页
java文件上传,客户端和服务器端.docx_第3页
第3页 / 共13页
java文件上传,客户端和服务器端.docx_第4页
第4页 / 共13页
java文件上传,客户端和服务器端.docx_第5页
第5页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《java文件上传,客户端和服务器端.docx》由会员分享,可在线阅读,更多相关《java文件上传,客户端和服务器端.docx(13页珍藏版)》请在三一办公上搜索。

1、java文件上传,客户端和服务器端package com.gem.hsx.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.List; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.http.HttpS

2、ervlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import mons.fileupload.FileItem; import mons.fileupload.FileItemFactory; import mons.fileupload.disk.DiskFileItemFactory; import mons.fileupload.servlet.ServletFileUpload; public class UploadServlet

3、extends HttpServlet SuppressWarnings(unchecked) protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String BOUNDARY= UUID.randomUUID.toString; try request.setCharacterEncoding(UTF-8); / 设置处理请求参数的编码格式 response.setContentType(text/html;

4、charset=UTF-8); / 设置Content-Type字段值 PrintWriter out = response.getWriter; out.println(文件开始!); / 下面的代码开始使用Commons-UploadFile组件处理上传的文件数据 FileItemFactory factory = new DiskFileItemFactory; / 建立FileItemFactory对象 ServletFileUpload upload = new ServletFileUpload(factory); / 分析请求,并得到上传文件的FileItem对象 List it

5、ems = upload.parseRequest(request); / 从web.xml文件中的参数中得到上传文件的路径 String uploadPath = d:upload; File file = new File(uploadPath); if (!file.exists) file.mkdir; String filename = ; / 上传文件保存到服务器的文件名 InputStream is = null; / 当前上传文件的InputStream对象 / 循环处理上传文件 for (FileItem item : items) / 处理普通的表单域 if (item.i

6、sFormField) if (item.getFieldName.equals(filename) / 如果新文件不为空,将其保存在filename中 if (!item.getString.equals() filename = item.getString(UTF-8); / 处理上传文件 else if (item.getName != null & !item.getName.equals() / 从客户端发送过来的上传文件路径中截取文件名 filename = item.getName.substring( item.getName.lastIndexOf()+1); is = i

7、tem.getInputStream; / 得到上传文件的InputStream对象 / 将路径和上传文件名组合成完整的服务端路径 filename = uploadPath +BOUNDARY+filename; / 如果服务器已经存在和上传文件同名的文件,则输出提示信息 if (new File(filename).exists) new File(filename).delete; / 开始上传文件 if (!filename.equals() / 用FileOutputStream打开服务端的上传文件 FileOutputStream fos = new FileOutputStrea

8、m(filename); byte buffer = new byte8192; / 每次读8K字节 int count = 0; / 开始读取上传文件的字节,并将其输出到服务端的上传文件输出流中 while (count = is.read(buffer) 0) fos.write(buffer, 0, count); / 向服务端文件写入字节流 fos.close; / 关闭FileOutputStream对象 is.close; / InputStream对象 out.println(文件上传成功!); catch (Exception e) package com.gem.hsx.ac

9、tivity; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.ListActivity; import android.content.Context; import android.content.Intent; import .Uri; import android.os.Bundle; import android.util.Log; import andro

10、id.view.Display; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.WindowManager.LayoutParams; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import

11、android.widget.TextView; import com.gem.hsx.activity.R; public class ExDialog extends ListActivity private ListMap mData; private String mDir = /sdcard; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); Intent intent = this.getIntent; Bundle bl = intent.

12、getExtras; String title = bl.getString(explorer_title); Uri uri = intent.getData; mDir = uri.getPath; setTitle(title); mData = getData; MyAdapter adapter = new MyAdapter(this); setListAdapter(adapter); WindowManager m = getWindowManager; Display d = m.getDefaultDisplay; LayoutParams p = getWindow.ge

13、tAttributes; p.height = (int) (d.getHeight * 0.8); p.width = (int) (d.getWidth * 0.95); getWindow.setAttributes(p); private ListMap getData ListMap list = new ArrayListMap; Map map = null; File f = new File(mDir); File files = f.listFiles; if (!mDir.equals(/sdcard) map = new HashMap; map.put(title,

14、返回上一级目录/); map.put(info, f.getParent); map.put(img, R.drawable.ex_folder); list.add(map); if (files != null) for (int i = 0; i files.length; i+) map = new HashMap; map.put(title, filesi.getName); map.put(info, filesi.getPath); if (filesi.isDirectory) map.put(img, R.drawable.ex_folder); else map.put(

15、img, R.drawable.ex_doc); list.add(map); return list; Override protected void onListItemClick(ListView l, View v, int position, long id) Log.d(MyListView4-click, (String) mData.get(position).get(info); if (Integer) mData.get(position).get(img) = R.drawable.ex_folder) mDir = (String) mData.get(positio

16、n).get(info); mData = getData; MyAdapter adapter = new MyAdapter(this); setListAdapter(adapter); else finishWithResult(String) mData.get(position).get(info); public final class ViewHolder public ImageView img; public TextView title; public TextView info; public class MyAdapter extends BaseAdapter pr

17、ivate LayoutInflater mInflater; public MyAdapter(Context context) this.mInflater = LayoutInflater.from(context); public int getCount return mData.size; public Object getItem(int arg0) return null; public long getItemId(int arg0) return 0; public View getView(int position, View convertView, ViewGroup

18、 parent) ViewHolder holder = null; if (convertView = null) holder = new ViewHolder; convertView = mInflater.inflate(R.layout.listview, null); holder.img = (ImageView) convertView.findViewById(R.id.img); holder.title = (TextView) convertView.findViewById(R.id.title); / holder.info = (TextView) conver

19、tView.findViewById(R.id.info); convertView.setTag(holder); else holder = (ViewHolder) convertView.getTag; holder.img.setBackgroundResource(Integer) mData.get(position).get( img); holder.title.setText(String) mData.get(position).get(title); /holder.info.setText(String) mData.get(position).get(info);

20、return convertView; private void finishWithResult(String path) Bundle conData = new Bundle; conData.putString(results, Thanks Thanks); Intent intent = new Intent; intent.putExtras(conData); Uri startDir = Uri.fromFile(new File(path); intent.setDataAndType(startDir, vnd.android.cursor.dir/lysesoft.an

21、dexplorer.file); setResult(RESULT_OK, intent); finish; ; package com.gem.hsx.activity; import java.io.File; import com.gem.hsx.util.UploadUtil; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import .Uri; import android.os.Bundle; import android.os.Hand

22、ler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class UpFile3Activity extends Activity private static final int REQUEST_EX = 1; private String requestURL = http:/10.110.5.38:8080/

23、UpFile1/UploadServlet; private Button up; String filepath; ProgressDialog p; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button); up=(Button) findViewById(R.id.up); button.setOn

24、ClickListener(new View.OnClickListener public void onClick(View v) Intent intent = new Intent; intent.putExtra(explorer_title, getString(R.string.dialog_read_from_dir); intent.setDataAndType(Uri.fromFile(new File(/sdcard), */*); intent.setClass(UpFile3Activity.this, ExDialog.class); startActivityFor

25、Result(intent, REQUEST_EX); ); up.setOnClickListener(new UpOnclick); protected void onActivityResult(int requestCode, int resultCode, Intent intent) if (resultCode = RESULT_OK) if (requestCode = REQUEST_EX) Uri uri = intent.getData; TextView text = (TextView) findViewById(R.id.text); text.setText(文件

26、路径为 + uri); filepath=uri.toString.substring(6); System.out.println(filepath); private class UpOnclick implements OnClickListener public void onClick(View v) p=new ProgressDialog(UpFile3Activity.this); p.setTitle(上传中); p.setMessage(正在上传,请等待); p.show; new Thread(new Runnable public void run File file=

27、new File(filepath); UploadUtil uploadUtil=new UploadUtil; uploadUtil.uploadFile(file, requestURL); Message message=new Message; message.obj=上传完成; handler.sendMessage(message); ).start; Handler handler=new Handler Override public void handleMessage(Message msg) System.out.println(msg.toString); p.dis

28、miss; super.handleMessage(msg); ; package com.gem.hsx.util; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import .HttpURLConnection; import .MalformedURLException; import .URL; import java.util.UUID; impo

29、rt android.util.Log; /* * * 上传工具类 * author spring sky */ public class UploadUtil private static final String TAG = uploadFile; private static final int TIME_OUT = 10*1000; /超时时间 private static final String CHARSET = utf-8; /设置编码 /* * android上传文件到服务器 * param file 需要上传的文件 * param RequestURL 请求的rul * r

30、eturn 返回响应的内容 */ public String uploadFile(File file,String RequestURL) String result = null; String BOUNDARY = UUID.randomUUID.toString; /边界标识 随机生成 String PREFIX = - , LINE_END = rn; String CONTENT_TYPE = multipart/form-data; /内容类型 try URL url = new URL(RequestURL); HttpURLConnection conn = (HttpURL

31、Connection) url.openConnection; conn.setReadTimeout(TIME_OUT); conn.setConnectTimeout(TIME_OUT); conn.setDoInput(true); /允许输入流 conn.setDoOutput(true); /允许输出流 conn.setUseCaches(false); /不允许使用缓存 conn.setRequestMethod(POST); /请求方式 conn.setRequestProperty(Charset, CHARSET); /设置编码 conn.setRequestProperty

32、(connection, keep-alive); conn.setRequestProperty(Content-Type, CONTENT_TYPE + ;boundary= + BOUNDARY); if(file!=null) /* * 当文件不为空,把文件包装并且上传 */ DataOutputStream dos = new DataOutputStream( conn.getOutputStream); StringBuffer sb = new StringBuffer; sb.append(PREFIX); sb.append(BOUNDARY); sb.append(LIN

33、E_END); /* * 这里重点注意: * name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件 * filename是文件的名字,包含后缀名的 比如:abc.png */ sb.append(Content-Disposition: form-data; name=img; filename=+file.getName+LINE_END); sb.append(Content-Type: application/octet-stream; charset=+CHARSET+LINE_END); sb.append(LINE_END); dos.write(sb.toS

34、tring.getBytes); InputStream is = new FileInputStream(file); byte bytes = new byte1024; int len = 0; while(len=is.read(bytes)!=-1) dos.write(bytes, 0, len); is.close; dos.write(LINE_END.getBytes); byte end_data = (PREFIX+BOUNDARY+PREFIX+LINE_END).getBytes; dos.write(end_data); dos.flush; /* * 获取响应码

35、200=成功 * 当响应成功,获取响应的流 */ int res = conn.getResponseCode; Log.e(TAG, response code:+res); / if(res=200) / Log.e(TAG, request success); InputStream input = conn.getInputStream; StringBuffer sb1= new StringBuffer; int ss ; while(ss=input.read)!=-1) sb1.append(char)ss); result = sb1.toString; Log.e(TAG, result : + result); / / else / Log.e(TAG, request error); / catch (MalformedURLException e) e.printStackTrace; catch (IOException e) e.printStackTrace; return result;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号