我正嘗試將映像上傳到服務器。上傳到服務器後的空映像文件
這裏是我的Android寫的代碼到圖像文件發送與其他一些參數到服務器一起:
static String imagePath = "/storage/sdcard0/Pictures/image.jpg";
static String url = "http://example.com/api";
static String user_id = "99401";
public static void executeMultipartPost() throws IOException, ClientProtocolException {
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpPost httppost = new HttpPost(url);
File file = new File(imagePath);
FileBody fb = new FileBody(file);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addPart("user_id", new StringBody(user_id));
builder.addPart("type", new StringBody("single"));
builder.addPart("userfile", fb);
final HttpEntity entity = builder.build();
httppost.setEntity(entity);
Log.i(TAG, "Executing request: " + httppost.getRequestLine());
HttpResponse response = httpclient.execute(httppost);
HttpEntity resEntity = response.getEntity();
Log.i(TAG, ""+response.getStatusLine());
if (resEntity != null) {
Log.i(TAG, EntityUtils.toString(resEntity));
}
if (resEntity != null) {
resEntity.consumeContent();
}
httpclient.getConnectionManager().shutdown();
}
一切正常,當它上傳到服務器,除了,服務器接收的空的圖像。我只能看到一個0字節的圖像文件。我猜想客戶端代碼中的某些內容沒有正確設置。
我在logcat中得到執行代碼後的反應是這樣的,(從Laravel錯誤日誌):
<html><h2>Unhandled Exception</h2>
<h3>Message:</h3>
<pre>copy(): The first argument to copy() function cannot be a directory</pre>
<h3>Location:</h3>
<pre>/home/ked.ai/www/laravel/file.php on line 92</pre>
<h3>Stack Trace:</h3>
<pre>#0 /home/ked.ai/www/laravel/laravel.php(42): Laravel\Error::native(2, 'copy(): The fir...', '/home/ked.ai/ww...', 92)
#1 [internal function]: Laravel\{closure}(2, 'copy(): The fir...', '/home/ked.ai/ww...', 92, Array)
#2 /home/ked.ai/www/laravel/file.php(92): copy('/', '/home/ked.ai/ww...')
#3 /home/ked.ai/www/application/controllers/api2/item.php(190): Laravel\File::copy('/', '/home/ked.ai/ww...')
#4 [internal function]: Api2_Item_Controller->post_new()
#5 /home/ked.ai/www/laravel/routing/controller.php(325): call_user_func_array(Array, Array)
#6 /home/ked.ai/www/laravel/routing/controller.php(285): Laravel\Routing\Controller->response('new', Array)
#7 /home/ked.ai/www/laravel/routing/controller.php(165): Laravel\Routing\Controller->execute('new', Array)
#8 /home/ked.ai/www/laravel/routing/route.php(153): Laravel\Routing\Controller::call('[email protected]', Array)
#9 /home/ked.ai/www/laravel/routing/route.php(124): Laravel\Routing\Route->response()
#10 /home/ked.ai/www/laravel/laravel.php(167): Laravel\Routing\Route->call()
#11 /home/ked.ai/www/public/index.php(34): require('/home/ked.ai/ww...')
#12 {main}</pre></html>
好像它傳遞一個目錄而不是文件的。任何解決方法?
使用FTP將圖像上傳到服務器 – suresh
否。Laravel是服務器部分。我爲我的誤會道歉。我只想使用API網址從android設備提交我的圖片。 – AimanB
我正面臨着一個同樣的問題。我的問題是,當我編碼圖像到基地64和發送到服務器使用改造它顯示灰色圖像,但是當我編碼相同的基本64字符串和轉換爲位圖使用位圖inimage它完美地顯示圖像。不能弄清楚這個問題你能幫助我嗎? –