綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[求助] android上傳圖片發生錯誤

[複製連結] 查看: 1939|回覆: 8|好評: 0
跳轉到指定樓層
樓主
lkk47 | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2013-8-11 22:44

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
我的伺服器是php
手機上傳圖片時小圖可以上傳  大圖超過2.5M的無法上傳
以下是大圖無法上船的log
08-11 22:33:38.810: D/SensorManager(19016): registerListener :: handle = 0  name= LSM330DLC 3-axis Accelerometer delay= 200000 Listener= android.view.OrientationEventListener$SensorEventListenerImpl@425b6a30
08-11 22:33:41.605: D/Create Response(19016): {"message":"Product successfully created.","success":1}
08-11 22:33:41.750: D/SensorManager(19016): unregisterListener::  Listener= android.view.OrientationEventListener$SensorEventListenerImpl@425b6a30
08-11 22:33:41.750: D/Sensors(19016): Remain listener = Sending .. normal delay 200ms
08-11 22:33:41.750: I/Sensors(19016): sendDelay --- 200000000
08-11 22:33:41.750: D/SensorManager(19016): JNI - sendDelay
08-11 22:33:41.750: I/SensorManager(19016): Set normal delay = true



片段程式碼如下
  1. int res=0;
  2.                         String result = null;
  3.                         String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成
  4.                         String PREFIX = "--", LINE_END = "\r\n";
  5.                         String CONTENT_TYPE = "multipart/form-data"; // 内容类型

  6.                         try {
  7.                                 URL url = new URL(strUrl);
  8.                                 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  9. //                                conn.setReadTimeout(TIME_OUT);
  10. //                                conn.setConnectTimeout(TIME_OUT);
  11.                                 conn.setDoInput(true); // 允许输入流
  12.                                 conn.setDoOutput(true); // 允许输出流
  13.                                 conn.setUseCaches(false); // 不允许使用缓存
  14.                                 conn.setRequestMethod("POST"); // 请求方式
  15.                                 conn.setRequestProperty("Charset", CHARSET); // 设置编码
  16.                                 conn.setRequestProperty("connection", "keep-alive");
  17.                                 conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary="+ BOUNDARY);

  18.                                 if (file != null) {
  19.                                         /**
  20.                                          * 当文件不为空时执行上传
  21.                                          */
  22.                                         DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
  23.                                         StringBuffer sb = new StringBuffer();
  24.                                         sb.append(PREFIX);
  25.                                         sb.append(BOUNDARY);
  26.                                         sb.append(LINE_END);
  27.                                         /**
  28.                                          * 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件
  29.                                          * filename是文件的名字,包含后缀名
  30.                                          */

  31.                                         sb.append("Content-Disposition: form-data; name=\"myfile\"; filename=\""
  32.                                                         + imagename + "\"" + LINE_END);
  33.                                         sb.append("Content-Type: application/octet-stream; charset="
  34.                                                         + CHARSET + LINE_END);
  35.                                         sb.append(LINE_END);
  36.                                         dos.write(sb.toString().getBytes());
  37.                                         InputStream is = new FileInputStream(file);
  38.                                         int bytesAvailable = is.available();
  39.                                         int bufferSize = Math.min(bytesAvailable, 1024 * 1024 * 1024*1024);
  40.                                         byte[] bytes = new byte[bufferSize];
  41.                                         int len = 0;
  42.                                         while ((len = is.read(bytes)) != -1) {
  43.                                                 dos.write(bytes, 0, len);
  44.                                         }
  45.                                         is.close();
  46.                                         dos.write(LINE_END.getBytes());
  47.                                         byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END)
  48.                                                         .getBytes();
  49.                                         dos.write(end_data);
  50.                                         dos.flush();
  51.                                         /**
  52.                                          * 获取响应码 200=成功 当响应成功,获取响应的流
  53.                                          */
  54.                                          res = conn.getResponseCode();
  55.                                         if (res == 200) {
  56.                                                 Log.e(TAG, "request success");
  57.                                                 InputStream input = conn.getInputStream();
  58.                                                 StringBuffer sb1 = new StringBuffer();
  59.                                                 int ss;
  60.                                                 while ((ss = input.read()) != -1) {
  61.                                                         sb1.append((char) ss);
  62.                                                 }
  63.                                                 result = sb1.toString();
  64.                                                 Log.e("ok", "result : " + result);
  65.                                         } else {
  66.                                                 Log.e(TAG, "request error");
  67.                                         }
  68.                                 }
  69.                         } catch (MalformedURLException e) {
  70.                                 e.printStackTrace();
  71.                         } catch (IOException e) {
  72.                                 e.printStackTrace();
  73.                         }
複製代碼
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
ploglin | 收聽TA | 只看該作者
發表於 2013-8-12 10:48
錯誤訊息看不出來,不過我差應該是 memory 的問題。
有一個屬性是inSampleSize
你試著去調整來避開這個問題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
 樓主| lkk47 | 收聽TA | 只看該作者
發表於 2013-8-12 18:20

我用html去測試傳大圖到php server也是發生此問題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
whl | 收聽TA | 只看該作者
發表於 2013-8-12 19:11
php server 有設定正確嗎?沒設定正確上傳超過 2m 會有問題。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

5
 樓主| lkk47 | 收聽TA | 只看該作者
發表於 2013-8-13 11:01
whl 發表於 2013-8-12 19:11
php server 有設定正確嗎?沒設定正確上傳超過 2m 會有問題。


你指的php設定指的是php.ini還是程式碼?

php程式碼如下
  1. <?php
  2. $uploaddir = '';
  3. $uploadfile = $uploaddir.basename($_FILES['myfile']['name']);

  4. echo "<pre>";
  5. if (move_uploaded_file($_FILES['myfile']['tmp_name'], iconv("utf-8", "big5", $uploadfile))) {
  6.     echo "Upload OK \n";
  7. } else {
  8.     echo "Upload failed \n";
  9. }
  10. print_r($_FILES);
  11. echo "</pre>";
  12. ?>
複製代碼
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

6
xjxuvup | 收聽TA | 只看該作者
發表於 2013-8-13 11:17
php本身有預設上傳檔案大小
不知道你是否有調整過
如果你沒調整過
那自然是上傳不上去的
php.ini裡面可以設定
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

7
 樓主| lkk47 | 收聽TA | 只看該作者
發表於 2013-8-13 17:05
謝謝指教  晚點測試看看
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

8
M98530065 | 收聽TA | 只看該作者
發表於 2013-8-14 11:21
我也遇過這樣的狀況~~您可以這樣使用
儲存圖面時:
FileOutputStream bitmapWtriter = new FileOutputStream(file);
    if(newb.compress(Bitmap.CompressFormat.JPEG, 70, bitmapWtriter)) {  
        Log.d("TAG","保存文件成功!");  
   }

讀取圖片時:
  BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 2;     //
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

9
 樓主| lkk47 | 收聽TA | 只看該作者
發表於 2013-8-14 12:27
M98530065 發表於 2013-8-14 11:21
我也遇過這樣的狀況~~您可以這樣使用
儲存圖面時:
FileOutputStream bitmapWtriter = new FileOutputStrea ...

你說的是防止bitmap oom的發生
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則