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

}

}

}

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

  1. android上传文件到服务器

    package com.spring.sky.image.upload.network; import java.io.DataOutputStream; import java.io.File; i ...

  2. android -上传文件到服务器

    android上传文件到服务器       重点:最好是设置好content-type这些参数的配置!     package com.spring.sky.image.upload.network; ...

  3. Android操作HTTP实现与服务器通信(转)

    Android操作HTTP实现与服务器通信   本示例以Servlet为例,演示Android与Servlet的通信. 众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方 ...

  4. Android提交数据到JavaWeb服务器实现登录

    之前学习Android提交数据到php服务器没有成功,在看了两三个星期的视频之后,现在终于实现了与服务器的交互.虽然完成的不是PHP端的,但是在这个过程还是学到了不少东西的.现在我先来展示一下我的成果 ...

  5. 『Asp.Net 组件』Asp.Net 服务器组件 内嵌JS:让自己的控件动起来

    代码: using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace ...

  6. android文件上传到服务器

    package uploadDemo; import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStre ...

  7. 【经验记录】Android上传文件到服务器

    Android中实现上传文件,其实是很简单的,和在java里面是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要配置content-type的一些参数!如果这些都弄好了,上传就很简 ...

  8. 『Asp.Net 组件』Asp.Net 服务器组件 内嵌CSS:将CSS封装到程序集中

    代码: <span style="font-family:Microsoft YaHei; font-size:12px">using System; using Sy ...

  9. Android客户端调用Asp.net的WebService

    Android客户端调用Asp.net的WebService 我来说两句 |2011-11-23 13:39:15 在Android端为了与服务器端进行通信有几种方法:1.Socket通信2.WCF通 ...

随机推荐

  1. xdotool-linux下的按键精灵

    这是我在ST写的用来自动打开机顶盒的脚本 #!/bin/bash init_stb() { xdotool type "telnet 10.80.117.$1" xdotool k ...

  2. C++ 必知必会:条款15 成员的指针并非指针

    指向类成员的类成员的指针说是“指针”,其实是不合适的,因为他既不包含地址,其行为也不像指针 常规的指正,包含地址,对其解应用可以得到该指针包含地址所指向的对象 1: int a = 12: 2: in ...

  3. 转:OpenCms 9.0.1汉化

    LHD私人汉化. 1.完成安装OpenCms 2.如果正确安装,在浏览器输入以下地址即可打开登录页面(默认账号/密码:Admin/admin) http://localhost:8080/opencm ...

  4. POJ C++程序设计 编程题#3 编程作业—文件操作与模板

    编程题#3: 整数的输出格式 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 利 ...

  5. DataGridView点击排序完成后如何禁止自动排序

    Summary: Disable sorting after clicking DataGridView columnheader,Prevent databound DataGridView fro ...

  6. android 客户端支付宝 php服务器端编写

    生成私钥 输入“genrsa -out rsa_private_key.pem 1024”命令,回车后,在当前 bin 文件目 录中会新增一个 rsa_private_key.pem 文件,其文件为原 ...

  7. php如何实现页面回退的两种方法

    发布:thatboy   来源:网络  [大 中 小] 你有没有遇到过这样的情况:表单出错而返回页面时,之前填写的信息全不见了.本文为大家介绍二种支持php页面回退的方法,供大家参考. 本文原始链接: ...

  8. 第四章 管理程序流(In .net4.5) 之 事件和回调

    1. 概述 本章讲解如何使用 委托.lambda表达式 和 匿名方法 来创建和使用事件. 2. 主要内容 2.1 理解委托 委托是一种用方法签名形式定义的类型.可以让它指向其他方法,可以通过它调用其他 ...

  9. flask学习

    安装环境: centos 6.3 python2.6 使用easy_install安装方式: [root@localhost ~]# easy_install flask 简单的hello from  ...

  10. 说说用C语言求根的那些事儿

    C语言--求根:计算机只识别0和1,那么问题来了,作为计算工具如何解决数学问题?其实,计算机是死东西,都是程序员用计算机的的思维去加数学公式计算数学题的.听起来好高端的样子,其实啊,也就那么回事儿, ...