`

HttpURLConnection上传文件(图片)

阅读更多

HttpURLConnection上传文件(图片)

需求:用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, 300300);
    }
分享到:
评论

相关推荐

    JAVA通过HttpURLConnection 上传和下载文件的方法

    JAVA通过HttpURLConnection上传和下载文件的方法 JAVA通过HttpURLConnection上传和下载文件的方法是非常有实用价值的,需要的朋友可以参考下。HttpURLConnection是一个Java类,用于从网络中读取数据或向网络中写入...

    android HttpURLConnection上传图片demo

    这个"android HttpURLConnection上传图片demo"提供了一个具体的示例,教我们如何使用HttpURLConnection来完成这一任务。HttpURLConnection是Java标准库中的一个类,它允许Android应用程序与HTTP服务器进行通信,执行...

    android 文件上传(多个或单个),图片上传

    在Android开发中,文件上传,特别是图片上传,是常见的需求之一。这涉及到用户选择本地文件,通常是图片,然后通过网络接口将这些文件发送到服务器。本文将深入探讨如何实现Android平台上的多文件和单文件上传,以及...

    Java利用HttpURLConnection发送post请求上传文件.docx

    3. **Content-Type**:接下来的一行是`Content-Type`,指明了上传文件的MIME类型,如`text/plain`(对于文本文件)或`image/jpeg`(对于图片)。 4. **内容**:在`Content-Type`之后,是实际的文件内容或参数值,...

    android图片文件的上传

    在Android平台上,图片文件的上传是一项常见的任务,尤其在开发社交、电商或者任何涉及用户交互的应用时。这个过程涉及到文件的读取、网络通信以及数据的序列化等关键环节。以下将详细介绍如何在Android中实现图片...

    java实现上传网络图片到微信临时素材

    在上面的代码中,我们使用了 `HttpURLConnection` 类来发送 POST 请求到微信服务器,并上传图片文件。我们还使用了 `DataOutputStream` 类来输出文件流。 知识点 3:边界设置 在上传文件时,我们需要设置边界,...

    Android+php实现图片文件上传服务器

    1. **使用HTTP库**:Android原生的HttpURLConnection或者第三方库如OkHttp,用于发起HTTP请求,将图片文件上传到服务器。 2. **文件读取**:使用FileInputStream读取图片文件,将其转换为字节数组。 3. **...

    Android 仿微信选择图片,上传图片

    综上所述,"Android 仿微信选择图片,上传图片"涉及到多个环节,包括权限管理、图片选择与裁剪、文件压缩、多图处理、网络上传、进度显示、错误处理和本地缓存等。掌握这些知识点有助于开发者实现高效且用户体验良好...

    Android图片上传队列Service

    它是一种任务调度机制,用于管理用户的图片上传操作,确保在网络条件允许的情况下,图片能够按照一定的顺序逐个上传至文件服务器。队列的引入是为了避免并发问题,防止因为网络不稳定或服务器限制导致的上传失败,...

    ftp文件上传

    它允许用户从远程服务器下载文件或将文件上传到服务器。FTP文件上传是网站开发、数据迁移和系统管理等任务中常见的操作。 FTP服务器是提供FTP服务的软件,允许其他设备(客户端)连接并进行文件交互。在本文中,...

    Android上传单文件和多文件(后台使用MultipartFile)

    在Android应用开发中,文件上传是一项常见的功能,无论是图片、文档还是音频,用户可能需要将本地数据上传到服务器进行存储或处理。本知识点主要聚焦于如何在Android中实现单文件和多文件的上传,以及后台使用`...

    安卓Android源码——安卓图片上传和文件上传带jsp服务端源码.rar

    在安卓开发中,图片和文件上传是常见的功能需求,尤其在社交、云存储以及内容分享类应用中。这个压缩包提供了完整的安卓图片上传和文件上传的示例代码,结合了客户端(Android)与服务端(jsp)的实现,对于学习和...

    Http方式实现图片上传

    使用HttpURLConnection实现图片上传 HttpURLConnection是Java内置的网络连接组件,可以用来发送HTTP请求。下面是一个简单的使用示例: ```java URL url = new URL("http://yourserver.com/upload"); ...

    Android 和php交互上传图片文件功能

    2. **验证与安全检查**: 对上传的文件进行验证,确保它们是图片格式,大小不超过限制,防止恶意文件上传。可以使用`exif_imagetype()`函数检查文件类型,或者`getimagesize()`获取图片尺寸。 3. **存储文件**: 将...

    安卓图片上传和文件上传带jsp服务端源码

    在Android应用开发中,图片和文件的上传是常见的功能需求,尤其在社交、电商或云存储类应用中。本资源提供了完整的安卓图片上传和文件上传的解决方案,结合了JSP服务端源码,使得开发者可以深入理解整个上传流程并...

    Java实现图片上传

    另外,图片上传可能涉及到文件大小限制、文件类型的检查、图片尺寸的调整等。例如,服务器可能会拒绝超过一定大小的文件,或者只接受特定格式(如JPEG、PNG)的图片。这些可以通过在服务器端设置过滤规则或使用图像...

    文件上传源码 客户端服务端

    文件上传是Web应用程序中常见的操作,它涉及到客户端与服务器之间的数据传输。在这个场景下,"文件上传源码 客户端服务端" 提供了实现这一功能的代码示例,包括客户端和服务端两部分,使用的技术有Socket和...

    java 实现上传文件到远程服务器

    ### Java 实现上传文件到远程服务器(Spring MVC) 在现代软件开发中,文件上传功能是十分常见的需求之一,尤其在Web应用中。本篇文章将详细介绍如何利用Java编程语言结合Spring MVC框架来实现文件的远程上传功能。...

    安卓图片上传和文件上传带jsp服务端源码_文件上传代码.zip

    在Android应用开发中,图片和文件的上传是常见的功能需求,尤其在社交、电商或云存储类应用中。本资源提供了完整的安卓图片上传和文件上传的解决方案,包括JSP服务端源码,使得开发者能够更好地理解和实现这一过程。...

    Android应用源码之安卓图片上传和文件上传带jsp服务端源码.zip

    在Android应用开发中,图片和文件的上传是常见的功能需求,尤其在社交、分享和云存储类应用中不可或缺。这份源码提供了Android客户端与JSP服务端交互的完整实现,帮助开发者理解并掌握图片和文件上传的核心技术。...

Global site tag (gtag.js) - Google Analytics