需求:用HttpURLConnection模拟上传图片并把图片的名称也要传递过去.
简单分析:写入流的时候依次写入 图片名称 + "|" 分隔符 + 图片流
然后服务器接收的再处理流.分别取出图片名和图片.

/** *//**
* 上传方法
* 返回上传完毕的文件名
* *
*/
public String upload(File f)

{
try

{
//服务器IP(这里是从属性文件中读取出来的)
String hostip = FileSupport.getServerIP();
URL url = new URL("http://"+ hostip +"/oxServer/ReceiveServlet");
HttpURLConnection uc = (HttpURLConnection) url.openConnection();
//上传图片的一些参数设置
uc
.setRequestProperty(
"Accept",
"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, application/x-quickviewplus, */*");
uc.setRequestProperty("Accept-Language", "zh-cn");
uc
.setRequestProperty("Content-type",
"multipart/form-data; boundary=---------------------------7d318fd100112");
uc.setRequestProperty("Accept-Encoding", "gzip, deflate");
uc
.setRequestProperty("User-Agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
uc.setRequestProperty("Connection", "Keep-Alive");
uc.setDoOutput(true);
uc.setUseCaches(true);
//读取文件流
int size = (int) f.length();
byte[] data = new byte[size];
FileInputStream fis = new FileInputStream(f);
OutputStream out = uc.getOutputStream();
fis.read(data, 0, size);
//写入文件名
out.write(f.getName().trim().getBytes());
//写入分隔符
out.write('|');
//写入图片流
out.write(data);
out.flush();
out.close();
fis.close();
//读取响应数据
int code = uc.getResponseCode();
String sCurrentLine = "";
//存放响应结果
String sTotalString = "";
if (code == 200)

{
java.io.InputStream is = uc.getInputStream();
BufferedReader reader = new BufferedReader(
new InputStreamReader(is));
while ((sCurrentLine = reader.readLine()) != null)
if (sCurrentLine.length() > 0)
sTotalString = sTotalString + sCurrentLine.trim();
}
else

{
sTotalString = "远程服务器连接失败,错误代码:" + code;
}
return sTotalString;
}
catch (Exception e)

{
e.printStackTrace();
}
return null;
}
服务器Servlet:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException

{
ServletInputStream inStream = request.getInputStream(); // 取HTTP请求流
int size = request.getContentLength(); // 取HTTP请求流长度

byte[] buffer = new byte[size]; // 用于缓存每次读取的数据
byte[] result = new byte[size]; // 用于存放结果的数组
int count = 0;
int rbyte = 0;
// 循环读取
while (count < size)

{
rbyte = inStream.read(buffer); // 每次实际读取长度存于rbyte中 sflj
for (int i = 0; i < rbyte; i++)

{
result[count + i] = buffer[i];
}
count += rbyte;
}

// 先找到文件名和图片流的标志位'|'
int index = 0;
for (int i = 0; i < result.length; i++)

{
byte b = result[i];
if (b == '|')

{
index = i;
break;
}
}

// 存放文件名
byte name[] = new byte[index + 1];
// 存放图片字节
byte[] img = new byte[size - index];
for (int i = 0; i < result.length; i++)

{
if (i < index)

{
name[i] = result[i];
}
if (i > index)

{
// 这时注意img数组的index要从0开始
img[i - index - 1] = result[i];
}
}
// 还原文件名
String fileName = new String(name);

inStream.close();

String newFileName = renameFile(fileName);
// 响应客户端
response.setContentType("text/html");
// 注意响应中文数据时要设置
response.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
//可能情况 0 数据库无相关记录 1 文件名不符合要求 其它情况为正常
if(newFileName.equals("0"))

{
out.write("0|" + fileName);
}
else if(newFileName.equals("1"))

{
out.write("1|" + fileName);
}
else

{
out.write(fileName);
}
out.close();
//上传错误中止后续操作
if(newFileName.length()<= 1)

{
return;
}
File f = new File(ImageSupport.getOriginal() + "/" + newFileName);
FileOutputStream fos = new FileOutputStream(f);
fos.write(img);
fos.flush();
fos.close();
// 改变图片大小后重新放置到新地点
ImageSupport.changeImageSize(f, ImageSupport.getAfter() + "/"
+ newFileName, 300, 300);
}
我写的是一个批量上传图片的程序,经测试通过.
分享到:
相关推荐
在Java编程环境中,当需要与Web服务器交互,例如上传文件时,`HttpURLConnection`是一个常见的选择,因为它提供了灵活且高效的方式。本篇文章将详细讲解如何使用`HttpURLConnection`实现文件上传,同时涉及到服务器...
JAVA通过HttpURLConnection上传和下载文件的方法 JAVA通过HttpURLConnection上传和下载文件的方法是非常有实用价值的,需要的朋友可以参考下。HttpURLConnection是一个Java类,用于从网络中读取数据或向网络中写入...
在Android开发中,有时我们需要将本地的文件...通过理解以上步骤和注意事项,开发者可以有效地利用HttpURLConnection在Android应用中实现代理文件上传功能。同时,了解服务器端如何接收和处理这些文件也是至关重要的。
这个"android HttpURLConnection上传图片demo"提供了一个具体的示例,教我们如何使用HttpURLConnection来完成这一任务。HttpURLConnection是Java标准库中的一个类,它允许Android应用程序与HTTP服务器进行通信,执行...
在本文中,我们将深入探讨如何使用HttpURLConnection实现文件上传,同时也会涉及普通参数的传递。 首先,我们需要理解HTTP请求的基本结构。HTTP请求通常由以下几个部分组成:请求行、请求头、空行和请求体。在文件...
在给定的代码片段中,展示了如何使用`HttpURLConnection`进行文件下载。 首先,我们看到代码引入了`java.io`、`java.net`和`java.util`这三个包。`java.io`包含了输入/输出流,用于处理数据的读写;`java.net`包含...
本话题主要关注如何使用`HttpURLConnection`来实现从本地目录读取资源并上传到远程服务器的功能。 首先,`HttpURLConnection`是`java.net.URL`类的子类,它可以建立与指定URL所代表的服务器的连接,并执行HTTP协议...
本知识点将深入探讨如何使用`HttpURLConnection`与Servlet协同工作,处理多文件参数以及实现断点上传功能。 首先,`HttpURLConnection`是Java API中的一个核心类,它负责提供HTTP协议的连接功能。相比Apache ...
### HttpUrlConnection下载文件:Java实现详解 在Java编程中,`HttpUrlConnection`是用于发送HTTP请求和接收响应的标准工具之一。它提供了一个简单而强大的API来与Web服务器进行交互,包括GET、POST等HTTP方法。...
* 文件大小限制:HttpURLConnection对文件大小有一定的限制,超过限制的文件可能无法上传成功。 六、结论 本文详细介绍了Java 中HttpURLConnection附件上传的实例详解,包括HttpURLConnection简介、附件上传的基本...
在本例中,我们将探讨如何使用`HttpURLConnection`来下载图片,这是一个基础但实用的网络编程任务。下面我们将详细介绍这个过程,并涉及到的相关知识点。 1. **HttpURLConnection简介**: `HttpURLConnection`是`...
HttpURLConnection实现三方接口HTTP调用调用,带有FILE文件参数
//图片浏览按钮 et=(EditText)this.findViewById(R.id.et);//图片网址编辑框 iv=(ImageView)this.findViewById(R.id.iv);//图片显示控件 b.setOnClickListener//为图片浏览按钮添加监听器 这次的...
在Android中,使用`HttpURLConnection`进行文件上传的步骤如下: 1. 创建`HttpURLConnection`实例并连接到服务器的上传接口URL。 2. 设置请求方法为`POST`。 3. 设置`Content-Type`为`multipart/form-data`,并指定...
在这个场景中,我们将讨论如何利用HttpUrlConnection来下载图片并将其显示在ImageView上,以及如何下载百度网页源码并展示在WebView中。 1. **HttpUrlConnection基本使用** - 创建URL对象:首先,你需要创建一个...
3. **Content-Type**:接下来的一行是`Content-Type`,指明了上传文件的MIME类型,如`text/plain`(对于文本文件)或`image/jpeg`(对于图片)。 4. **内容**:在`Content-Type`之后,是实际的文件内容或参数值,...
断点续传是指当下载或上传文件过程中因网络问题中断后,可以从上次中断的位置继续进行,而不是重新开始。这对于大文件传输和节省用户流量非常有帮助。 **步骤1:初始化下载任务** 在Android应用中,我们需要维护一...
在Android开发中,文件上传,特别是图片上传,是常见的需求之一。这涉及到用户选择本地文件,通常是图片,然后通过网络接口将这些文件发送到服务器。本文将深入探讨如何实现Android平台上的多文件和单文件上传,以及...
HttpUrlConnection类是Android系统中的一种基本的网络请求方式,通过该类可以实现文件下载、上传等功能。 在本文中,我们将通过实例代码,介绍Android基于HttpUrlConnection类的文件下载功能。该实例代码可以帮助...
这个`downloadImage`方法接受图片的URL和本地保存路径,然后使用`HttpURLConnection`下载图片并保存到指定的文件。注意,为了防止内存泄漏,我们应在读取完数据后关闭所有流,并在完成操作后断开网络连接。 在实际...