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(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();

}

}

}

时间: 2024-11-05 12:35:57

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

Android上传图片(PHP服务器)

原理 Android客户端模拟一个HTTP的Post请求到服务器端,服务器端接收相应的Post请求后,返回响应信息给给客户端. PHP服务器 <?php move_uploaded_file($_FILES['file']['tmp_name'], "./upload/".$_FILES["file"]["name"]); ?> Android客户端 package com.example.uploadfile.app; import

android上传图片至服务器

本实例实现了android上传手机图片至服务器,服务器进行保存 服务器servlet代码publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String temp=request.getSession().getServletContext().getRealPath("/")+"temp"

C# WinForm 上传图片,文件到服务器的方法Uploader.ashx

网上有很多方案,起初用时,因为对asp.net不太了解,觉得FTP实现不错,可是后来发现,如果机器在域控下,就会有问题. 一年过去了,asp.net也熟悉了,知道ajax没事应该用ashx,验证码也用ashx,当然这里要说的WinForm上传也应该是ashx了吧,哈哈,先提供简单思路: 接收文件的asp.net是:Uploader.ashx,相关代码: view plaincopy to clipboardprint? <%@ WebHandler Language="C#" C

Android上传图片之调用系统拍照和从相册选择图片

Android上传图片之调用系统拍照和从相册选择图片 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015年12月17日下午发了第一篇博文,现在是2016年4月6日.时间间隔长的过分啊,我自己都看不下去了.原因呢?当然是自己的原因,其实是有很多时间来些博客的,但是这些时间都花在DOTA上了(还是太年轻啊).请原谅我的过错--. 一.概述: 现在几乎应用都会用到上传图片的功能,而要上传图片,首先得选择图片,本文不针对如何上传图片到服务器(每个项目与服务器交互的方式不同,因

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

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

Android上传文件到服务器(转)

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

《android上传图片》

这是主函数 package com.zmb.updemo; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.

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

之前学习Android提交数据到php服务器没有成功,在看了两三个星期的视频之后,现在终于实现了与服务器的交互.虽然完成的不是PHP端的,但是在这个过程还是学到了不少东西的.现在我先来展示一下我的成果图. 思想是:服务器端模拟数据库中存在一条数据为:username=123,password=123的用户.如果Android端提交的数据是用户名和密码都为123的数据.就返回成功,否则就返回失败. 由于看的关于教程的视频都是跟javaweb进行交互,所以自己就尝试着搭建了javaweb服务器.在这

Android客户端通过Socket连接服务器

Android客户端通过Socket连接服务器. Android互联网项目中,绝大部分都有连接远程服务器的需求,连接的方式有多种,可以是TCP的方式,当然也可以通过Socket的方式. 相对于TCP的方式,Socket的方式略显的较为原始,对于客户端来说,复杂度反而比TCP的方式还要高一些,毕竟TCP的连接有现成的框架可以使用, 比如Spring等. 而使用socket方式这些工作完全需要客户端来做,也增加了客户端的工作量,不过凡事有利弊,通过socket的方式,流量上 相对于TCP等的方式更加