Android中基於Socket方式的檔案上傳
需求: 圖片上傳到伺服器中. 在瀏覽器中測試可以通過。 證明伺服器端沒有問題. 但在android端上傳時不行。
思考有可能出問題的點:
1. 因為是檔案上傳時,http協議中檔案長度的計算是否有誤
2. 因為使用的是socket方式,http請求完全要手工拼接,所以拼接http協議的部分是否有問題.
3. android端能否呼叫到伺服器中的 Servlet, 這是一個關鍵點,如果能呼叫到,證明請求沒有問題. 如果呼叫不到,則證明android端的問題.
解決思路:
1. 將androidu端的程式碼最小化,只留下了上傳檔案一個部分,其它的引數去掉.
2. 仔細檢查協議的拼接部分,沒有問題.
3. 在伺服器中設定了一個斷點,斷點位置在servlet中的dopost方法的第一句話中,經過除錯跟蹤,發現客戶端能聯接上來,但隨著斷點向下執行,注意到 在以下紅色程式碼處,沒有進行addOp方法. 而我的請求地址寫的是:
if ("add".equals(op)) {
addOp(request, response);
}
} else {
}通過這個除錯,可以確定問題出在了客戶端, 為什麼會丟失引數呢?
4. 斷點除錯android客戶端程式碼:
a. 呼叫部分OK wu.postFileToServer(, null, ufs);
b. 傳送請求頭的部分:
OutputStream oos= socket.getOutputStream();
String requestFirstWord="POST "
請注意紅色程式碼部分: 原本我是想獲取到如下的協議: POST /testfileupload/uploadfile.action?op=add HTTP/1.1
但觀察變數得到的卻是: POST /testfileupload/uploadfile.action HTTP/1.1
, 瞬間 。。。。。(此處心情複雜)
url.getPath()只獲取到了 請求的路徑,但並不會獲取到請求的引數部分。 所以在傳送post請求時, op=add並沒有傳送. 伺服器端接收不到,所以沒有呼叫addOp()方法.
問題找到了,解決方案就出來了:
OutputStream oos= socket.getOutputStream();
String queryString=url.getQuery(); //取出請求引數.
String requestFirstWord="POST "+url.getPath()+"?"+queryString+" HTTP/1.1"+BREAKLINE; // POST /res/yyyback/backfood.action?op=add HTTP/1.1
oos.write( requestFirstWord.getBytes() );
解決問題還是須要心靜。 仔細觀察( 看來我還能坐得住).
相關推薦
Android中基於Socket方式的檔案上傳
問題描述: 需求: 圖片上傳到伺服器中. 在瀏覽器中測試可以通過。 證明伺服器端沒有問題. 但在android端上傳時不行。 思考有可能出問題的點:
Android中關於FTP的檔案上傳和下載
package ryancheng.example.progressbar; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; impo
Android Studio將本地計算機檔案上傳到模擬器scard檔案中
本人在學習Android開發中遇到這樣一個問題,將本地計算機中一個視訊上傳到模擬器的scard檔案中視訊的名字是1.MP4![這裡寫圖片描述](https://img-blog.csdn.net/201
Android中基於Socket的網絡通信
ram pre 請求 android 鏈接 ted block param gen Socket鏈接的建立過程: 1.服務器監聽 2.客戶端發出請求 3.建立鏈接 4.通信 Socketl特點: 1.Socket基於TCP鏈接,數據傳輸有保障 2.Socket適用於建立長時
Android核心技術-day05-02-檔案上傳
package com.gaozewen.fileupload; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; impor
基於TCP伺服器檔案上傳與下載
** ## service.c ** #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include &l
springmvc中Form表單檔案上傳使用ajax提交
上傳檔案這塊坑真是不少,耽誤了有幾個小時的時間,現在簡單總結一下; 首先springmvc的核心xml中配置下MultipartResolver: <!-- 配置 MultipartResolver --> <bean id="multipart
springboot基於MultipartFile實現檔案上傳
MultipartFile是springMVC的jar包,不需要其它座標,可以直接使用 一. 新建controller @RequestMapping("/uploadTest1") public String test1(@RequestParam("
Android 中打包成aar並上傳到Nexus搭建的maven倉庫
目的 方便元件化流通,搭建私有庫有助於多人協作開發專案,提高整合的穩定性和庫引用版本的可控性,也減少繁瑣的第三方庫的釋出工作。 環境搭建 下載 安裝Nexus–>配置環境,啟動伺服器(請自行百度,本文略) 修改localhost為電腦的ip (
React中使用fetch實現檔案上傳下載
在最近的專案中需要實現檔案上傳下載功能,在以前spring、jsp的專案中實現檔案上傳很簡單,但現在前後端分離,前端使用React,後端使用Spring Boot,實現就沒那麼方便了。 前端React使用fetch而非傳統的XMLHttpRequest從後端獲取
Java中利用MultipartFile實現檔案上傳
JavaWeb專案頁面實現檔案上傳功能 jsp檔案增加檔案上傳控制元件,可以放在form表單內,增加隱藏域儲存上傳路徑提交到後臺。 <div class="form-group"> <div class="col-sm-7 center "&g
Javaweb中最簡單的檔案上傳
3、servlet程式碼 package com.xiaojie.simpleFileupload; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Input
基於html5的檔案上傳案例
html5的formData物件可以向正常的form表單一樣通過ajax請求傳送,包括上傳檔案並且可以一次性上傳多個檔案。並且可以根據監聽事件,監視上傳進度,終止,結束等等。下面的例項程式碼使用到了bootstrap,跑的話先搭建好bootstrap環境。並且要支援html5的瀏覽器。 jsp頁面程式碼 &l
PHP程式碼中是如何實現檔案上傳的?
這裡使用PHP的全域性陣列$_FILES來實現檔案上傳: $_FILES[“file”][“name”] - 被上傳檔案的名稱 $_FILES[“file”][“type”] - 被上傳檔案的型別 $_FILES[“file”][“size”] - 被上傳檔案的大小,以位元組計 $_F
(轉)python 全棧開發,Day75(Django與Ajax,檔案上傳,ajax傳送json資料,基於Ajax的檔案上傳,SweetAlert外掛)
昨日內容回顧 基於物件的跨表查詢 正向查詢:關聯屬性在A表中,所以A物件找關聯B表資料,正向查詢 反向查詢:關聯屬性在A表中,所以B物件找A物件,反向查詢 一對多: 按欄位:xx book --
java 中 FtpClient 實現 FTP 檔案上傳、下載
package ftp; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWrit
基於AJAX的檔案上傳顯示進度條實現
基於Ajax的檔案上傳要實現的功能要求,要在使用者提交了上傳按鈕請求後,客戶端其頁面要顯示檔案上傳進度條。 其整個功能時序圖如圖所示。 簡單的說,要實現在客戶端顯示進度條,需要做的是:當客戶端提交上傳檔案請求後,伺服器在上傳檔案
基於WebUploader的檔案上傳外掛
首先把地址甩出來,http://fex-team.github.io/webuploader/ 裡面有比較完整的demo案例文件,本文主要是基於檔案上傳和圖片上傳增加了大量的註釋,基本保證了每行程式碼都有註釋以助於理解,是對官網demo的增強版,希望可以幫助大家更好的理解該
vue中實現圖片丶檔案上傳
html頁面 <input type="file" value="" id="file" @change='onUpload'>//注意不能帶括號 js程式碼 methods: {
JAVA NIO SOCKET大檔案上傳伺服器
當前很多手機應用或者是網路應用都需要支援大檔案上傳功能,有些用FTP來實現上傳但是FTP存在許多的問題。比如FTP的安全問題還有不支援GZIP壓縮等問題。採用SOCKET來實現檔案上傳,很輕鬆就可以實現斷點再續和負載均衡,將上傳後的檔案直接儲存到APACHE