Android 上传图片到 Asp.Net 服务器的问题

最近在做一个手机app联合系统管理做的应用程序,管理程序管理数据的发布和增删改查,手机app负责显示和操作业务逻辑这么一个功能。

刚开始路走的都很顺,但是走到通过Android客户端上传图片到Asp.Net 服务器的时候出现很大的问题,图片是上传了,就是显示不出来,用照片查看器查看的时候显示:‘没有预览’,用画图软件打开的时候显示‘无效的位图文件或不支持文件的格式’!!!

QQ截图20141110170853

QQ截图20141110170910 

 

大家想,肯定你的代码写得有问题,好吧,你们看看我的代码是什么问题吧:

Stream sr = context.Request.InputStream;
           byte[] buffer = new byte[4096];
           int bytesRead = 0;
           //将当前数据流写入服务器端文件夹ClientBin下  
           const string savePath = "/RiskNoticeImg"; //目标图片路径
           string dirPath = context.Server.MapPath(savePath);
           string path = dirPath + @"\" + picName;
           using (FileStream fs = File.Create(filePath, 4096))
           {
               while ((bytesRead = sr.Read(buffer, 0, buffer.Length)) > 0)
               {
                   //向文件中写信息  
                   fs.Write(buffer, 0, bytesRead);
               }
           }  

 

 

看看,你们觉得有什么问题吗?我是看不出来,搞了两天,人都快崩溃了,然后漫无目的的在网上找答案,有的说要Base64编码才行,但是还是不行,也不是说不行,是我没有试,最恶心的是这篇帖子:点击这里查看,为什么这么说呢,因为明明跟我是一样的问题,明明他也解决了,但是就是不告诉你怎么解决的,无奈之下求助项目经理,经过他电脑般的大脑高速运转就解决问题了,接下来就是见证奇迹的时刻:

context.Request.Files[0].SaveAs(filePath);

是的,就这一行代码就搞定了,如果你测试这行代码搞不定,那你可以根据它的Files.Count来循环输出它的文件像这样:context.Request.Files[i].SaveAs(filePath);这样就解决上传图片显示不了的问题了,希望对有些人有所帮助吧^_^,

最后想讲下,他是通过这个文件得到的灵感:

package main;

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 javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem; 
import org.apache.commons.fileupload.FileItemFactory; 
import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class hello extends HttpServlet{ 
    protected void service(HttpServletRequest request, 
            HttpServletResponse response) throws ServletException, IOException 
    { 
        try 
        { 
            request.setCharacterEncoding("UTF-8"); // 设置处理请求参数的编码格式 
            response.setContentType("text/html;charset=UTF-8"); // 设置Content-Type字段值 
            PrintWriter out = response.getWriter(); 
            // 下面的代码开始使用Commons-UploadFile组件处理上传的文件数据 
            FileItemFactory factory = new DiskFileItemFactory(); // 建立FileItemFactory对象 
            ServletFileUpload upload = new ServletFileUpload(factory); 
            // 分析请求,并得到上传文件的FileItem对象 
            List<FileItem> items = 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.isFormField()) 
                { 
                    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 = item.getInputStream(); // 得到上传文件的InputStream对象 
                } 
            } 
            // 将路径和上传文件名组合成完整的服务端路径 
            filename = uploadPath + filename; 
            // 如果服务器已经存在和上传文件同名的文件,则输出提示信息 
            if (new File(filename).exists()) 
            { 
                new File(filename).delete(); 
            } 
            // 开始上传文件 
            if (!filename.equals("")) 
            { 
                // 用FileOutputStream打开服务端的上传文件 
                FileOutputStream fos = new FileOutputStream(filename); 
                byte[] buffer = new byte[8192]; // 每次读8K字节 
                int count = 0; 
                // 开始读取上传文件的字节,并将其输出到服务端的上传文件输出流中 
                while ((count = is.read(buffer)) > 0) 
                { 
                    fos.write(buffer, 0, count); // 向服务端文件写入字节流 
                } 
                fos.close(); // 关闭FileOutputStream对象 
                is.close(); // InputStream对象 
                System.out.println("文件上传成功!!!"); 
                out.println("文件上传成功!"); 
            } 
        } 
        catch (Exception e) 
        { 
             System.out.println("出现异常"); 
             e.printStackTrace(); 
        } 
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值