天天看點

Android 上傳圖檔到 Asp.Net 伺服器的問題

最近在做一個手機app聯合系統管理做的應用程式,管理程式管理資料的釋出和增删改查,手機app負責顯示和操作業務邏輯這麼一個功能。

剛開始路走的都很順,但是走到通過Android用戶端上傳圖檔到Asp.Net 伺服器的時候出現很大的問題,圖檔是上傳了,就是顯示不出來,用照片檢視器檢視的時候顯示:‘沒有預覽’,用畫圖軟體打開的時候顯示‘無效的位圖檔案或不支援檔案的格式!!!

Android 上傳圖檔到 Asp.Net 伺服器的問題
Android 上傳圖檔到 Asp.Net 伺服器的問題

大家想,肯定你的代碼寫得有問題,好吧,你們看看我的代碼是什麼問題吧:

是的,就這一行代碼就搞定了,這段代碼差別于(我也不知道這兩行代碼有什麼差別,如果有牛人知道的話,希望給我留言小弟感激不盡!):

如果你測試這行代碼搞不定,那你可以根據它的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();

    }

}

繼續閱讀