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

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

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

 

 

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

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(path, 4096))
           {
               while ((bytesRead = sr.Read(buffer, 0, buffer.Length)) > 0)
               {
                   //向文件中写信息
                   fs.Write(buffer, 0, bytesRead);
               }
           }  

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

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

是的,就这一行代码就搞定了,这段代码区别于(我也不知道这两行代码有什么区别,如果有牛人知道的话,希望给我留言小弟感激不尽!):

context.Request.InputStream;

如果你测试这行代码搞不定,那你可以根据它的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();

        }

    }

}

时间: 2024-09-16 00:38:41

Android 上传图片到 Asp.Net 服务器的问题的相关文章

php.接收-安卓端如何上传图片到PHP后台服务器上?

问题描述 安卓端如何上传图片到PHP后台服务器上? 网上找了很多资料,但是还是一知半解的,用http做完可以接收到PHP返回的错误信息,但是还是不知道这错误怎么解决,求大神指点,菜鸟在此长拜不起... 解决方案 android 上传图片到php服务器iphone上传图片到webserver 手机端和服务器(php)---------------------- 解决方案二: 通过http网络进行上传啊!

android上传图片到PHP的过程详解_php实例

今天在做上传头像的时候,总是提交连接超时错误,报错信息如下:XXXXXXSokcetTimeOutXXXXXXXX 然后自己设置HTTP的超时时间: 复制代码 代码如下: [java] view plaincopyprint? //设置超时时间  httpclient.setTimeout(20000);  再building,runing,还是不行....这就怪了,明明好好的,怎么会突然就变成连接超时了呢!又折腾了一阵子后,也跟后台那边的朋友沟通过,他也测试了上传接口,发现没什么问题,就让我自

android 上传文件到服务器代码实例

android对于上传文件,还是很简单的,和java里面的上传都是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要一些content-type这些参数的配置!  如果这些都弄好了,上传就很简单了!   下面是我写的一个上传的工具类:复制代码 代码如下:package com.spring.sky.image.upload.network; import java.io.DataOutputStream;import java.io.File;import java.io.Fi

android 如何通过接口向服务器上传视频

问题描述 android 如何通过接口向服务器上传视频 在搞一个小项目 需要用到 新手 没接触过 希望会的朋友提供一个Demo 谢谢! 解决方案 你就找一个上传文件的例子就行了,不管你是视频还是图片,都一样的方式 解决方案二: http://www.cnblogs.com/top5/archive/2013/03/07/2947344.html

创建支持ASP的服务器(IIS详细设置)

iis|创建|服务器 本教程将讲解支持运行ASP程序的IIS服务器的配置. 系统要求:Windows 2000, Windows XP Pro, Windows 2003 Server(推荐) 在Windows服务器中,我们通常使用IIS(Internet Information Server)作为运行ASP程序的应用服务器.Windows NT/2000/XP(Pro)/2003均自带IIS服务器,在Win98下也可以用PWS作为运行ASP的服务器,XP Home没有自带IIS.各个版本的II

关于ASP.net服务器的入侵方法详解

asp.net|服务器|详解 有个朋友在QQ上问了我关于ASP.net服务器的入侵方法我将ASP.net上的一些入侵常用手段告诉大家 1.ASP中常用的标准组件:FileSystemObject,这个组件为 ASP 提供了强大的文件系统访问能力,可以对服务器硬盘上的任何有权限的目录和文件进行读写.删除.改名等操作.FSO对象来自微软提供的脚本运行库scrrun.dll中.使用下面的代码就可以在ASP中创建一个FSO对象:Set fso = CreateObject("Scripting.File

实现 asp 的服务器无刷新推技术

服务器|刷新|无刷新 关于推送技术-----------------------------转载请注明出处:一鹤.NET_WWW.1HE.NET Client PULL(客户端拉技术)通常,聊天室通过不断刷新来显示服务器的最新信息,即所谓的Client PULL(客户端拉技术)Client PULL必须不停的建立连接,刷新信息,断开连接,这样效率很低,而且速度很慢.(如果加快速度,频繁的建立断开连接刷新页面都会增加服务器与客户端的资源消耗) Server Push(服务器推技术)推技术就是建立一

asp 检测服务器所安装组件

asp 检测服务器所安装组件 ================================== 函数名:IsObjInstalled 作  用:检查组件是否已经安装 参  数:strClassString ----组件名 返回值:True  ----已经安装       False ----没有安装 ================================== Function IsObjInstalled(strClassString)  On Error Resume Next

asp.net“服务器应用程序不可用”怎么办

故障分析一:造成asp.net服务器应用程序不可用的情况一般是用户安装了Net Framework之后,然后在安装包IIS程序,这样用的asp.net尚未在IIS上面注册所以才导致找不到服务器. 解决方法: 如果是没有在IIS上面注册而出现的故障的话,那么必须重新在.net命令行上线卸载在安装,然后在aspnet_regllS/i安装,安装完成后重新下IIS,再删除"默认应用程序:这样就能将asp.net站点重新创建了.之后就不会出现服务器不可用的现象了.重新注册.net的命令[C:WINDOW