圖片上傳 - Android上傳圖片到Java服務(wù)端出現(xiàn)的問(wèn)題
問(wèn)題描述
我在Android端上傳圖片的時(shí)候URL如果使用的內(nèi)網(wǎng)IP,用內(nèi)部網(wǎng)絡(luò)上傳圖片的時(shí)候是沒(méi)有問(wèn)題的,但是如果我Android端URL使用外網(wǎng)IP的話,只能使用公司內(nèi)部網(wǎng)絡(luò)才能正確上傳,用自己流量或其他外部網(wǎng)絡(luò)只能上傳幾十k的圖片,上傳大一點(diǎn)的就上傳不了。之前覺(jué)得可能是外網(wǎng)有什么限制,但是今天在家通過(guò)服務(wù)端的測(cè)試頁(yè)面(如下圖)上傳圖片,也成功了,所以感覺(jué)外網(wǎng)應(yīng)該也沒(méi)有什么限制,實(shí)在不知道是什么原因了,有大神知道嗎?急求答案,謝謝!試過(guò)用Socket上傳,也是一樣的情況,會(huì)出現(xiàn)一樣的問(wèn)題。
Android端代碼:
public class HttpUpLoadImageUtil { static String BOUNDARY = java.util.UUID.randomUUID().toString(); static String PREFIX = '--', LINEND = 'rn'; static String MULTIPART_FROM_DATA = 'multipart/form-data'; static String CHARSET = 'UTF-8'; public static void doPostPicture(String urlStr, Map<String,Object> paramMap, File pictureFile ) throws Exception{URL url = new URL(urlStr);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setDoInput(true);// 允許輸入conn.setDoOutput(true);// 允許輸出conn.setUseCaches(false);conn.setReadTimeout(10 * 1000); // 緩存的最長(zhǎng)時(shí)間conn.setRequestMethod('POST');conn.setRequestProperty('Charset', 'UTF-8');conn.setRequestProperty('Connection', 'Keep-Alive');conn.setRequestProperty('Content-Type', MULTIPART_FROM_DATA + ';boundary=' + BOUNDARY);DataOutputStream os = new DataOutputStream(conn.getOutputStream());StringBuilder sb = new StringBuilder(); //用StringBuilder拼接報(bào)文,用于上傳圖片數(shù)據(jù)sb.append(PREFIX);sb.append(BOUNDARY);sb.append(LINEND);sb.append('Content-Disposition: form-data; name='file'; filename='' + pictureFile.getName() + ''' + LINEND);sb.append('Content-Type: image/jpg; charset=' + CHARSET + LINEND);sb.append(LINEND);os.write(sb.toString().getBytes());InputStream is = new FileInputStream(pictureFile);byte[] buffer = new byte[1024];int len = 0;while ((len = is.read(buffer)) != -1) { os.write(buffer, 0, len); //寫(xiě)入圖片數(shù)據(jù)}is.close();os.write(LINEND.getBytes());StringBuilder text = new StringBuilder();for(Map.Entry<String,Object> entry : paramMap.entrySet()) { //在for循環(huán)中拼接報(bào)文,上傳文本數(shù)據(jù) text.append('--'); text.append(BOUNDARY); text.append('rn'); text.append('Content-Disposition: form-data; name=''+ entry.getKey() + ''rnrn'); text.append(entry.getValue()); text.append('rn');}os.write(text.toString().getBytes('utf-8')); //寫(xiě)入文本數(shù)據(jù)// 請(qǐng)求結(jié)束標(biāo)志byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();os.write(end_data);os.flush();os.close();// 得到響應(yīng)碼int res = conn.getResponseCode();System.out.println('asdf code '+ res);System.out.println('asdf ' + conn.getResponseMessage());conn.disconnect(); }}
問(wèn)題解答
回答1:能成功的話代碼出問(wèn)題的可能性是不大的,如果要是出錯(cuò)了至少需要得到錯(cuò)誤信息才能排查。
相關(guān)文章:
1. python執(zhí)行cmd命令,怎么讓他執(zhí)行類似Ctrl+C效果將其結(jié)束命令?2. python - Flask寫(xiě)的注冊(cè)頁(yè)面,當(dāng)注冊(cè)時(shí),如果填寫(xiě)數(shù)據(jù)庫(kù)里有的相同數(shù)據(jù),就報(bào)錯(cuò)3. python - Django有哪些成功項(xiàng)目?4. python - scrapy url去重5. 實(shí)現(xiàn)bing搜索工具urlAPI提交6. MySQL主鍵沖突時(shí)的更新操作和替換操作在功能上有什么差別(如圖)7. mysql在限制條件下篩選某列數(shù)據(jù)相同的值8. 關(guān)于mysql聯(lián)合查詢一對(duì)多的顯示結(jié)果問(wèn)題9. 數(shù)據(jù)庫(kù) - Mysql的存儲(chǔ)過(guò)程真的是個(gè)坑!求助下面的存儲(chǔ)過(guò)程哪里錯(cuò)啦,實(shí)在是找不到哪里的問(wèn)題了。10. Python從URL中提取域名
