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

简介: 最近在做一个手机app联合系统管理做的应用程序,管理程序管理数据的发布和增删改查,手机app负责显示和操作业务逻辑这么一个功能。 刚开始路走的都很顺,但是走到通过Android客户端上传图片到Asp.

最近在做一个手机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(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();
        }
    }

}

目录
相关文章
|
8月前
|
开发框架 JavaScript 前端开发
震撼!破解 ASP.NET 服务器控件 Button 执行顺序之谜,颠覆你的开发认知!
【8月更文挑战第16天】在ASP.NET开发中,通过Button控件实现先执行JavaScript再触后台处理的需求十分常见。例如,在用户点击按钮前需前端验证或提示,确保操作无误后再传递数据至后台深度处理。此过程可通过设置Button的`OnClientClick`属性调用自定义JavaScript函数完成验证;若验证通过,则继续触发后台事件。此外,结合jQuery也能达到相同效果,利用`__doPostBack`手动触发服务器端事件。这种方式增强了应用的交互性和用户体验。
81 8
|
5月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
96 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
7月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
114 20
Android经典面试题之图片Bitmap怎么做优化
|
6月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
91 1
|
6月前
|
监控 网络安全 调度
Quartz.Net整合NetCore3.1,部署到IIS服务器上后台定时Job不被调度的解决方案
解决Quartz.NET在.NET Core 3.1应用中部署到IIS服务器上不被调度的问题,通常需要综合考虑应用配置、IIS设置、日志分析等多个方面。采用上述策略,结合细致的测试和监控,可以有效地提高定时任务的稳定性和可靠性。在实施任何更改后,务必进行充分的测试,以验证问题是否得到解决,并监控生产环境的表现,确保长期稳定性。
326 1
|
6月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
151 4
|
6月前
|
Python
Flask学习笔记(二):基于Flask框架上传图片到服务器端并原名保存
关于如何使用Flask框架上传图片到服务器端并以其原名保存的教程。
213 1
|
7月前
|
开发框架 JavaScript 前端开发
|
.NET Windows 开发框架
asp.net获取服务器信息
1.获取IP地址 服务端获取 //方法一 HttpContext.Current.Request.UserHostAddress; //方法二 HttpContext.Current.
1188 0
|
.NET 数据库 开发框架
asp.net 获取服务器相关信息
 #region 返回操作系统信息 .net版本 数据库大小  程序大小等方法        ///         /// 获取服务器系统信息        ///         public string GetOSVersion()        {            OperatingSystem os = Environment.
804 0

热门文章

最新文章