2016-03-10 50 views
0

这是webstorm.upload.single上的服务器代码给出未解决的错误我已经安装了multer模块,但它仍然给出错误,即使我不使用upload.single req CONSOLE.LOGupload.single()未解决和req.file未定义

var express = require('express'); 
var logger = require('morgan'); 
var bodyParser = require('body-parser'); 
var request = require('request'); 
var multer = require('multer'); 

**var upload = multer({ dest: 'uploads/' });** 


var app = express(); 
var port  = process.env.PORT || 8080; 
var config = require("./config"); 
var requests = require("./model")(config); 

app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 

app.post('/uploadimage',**upload.single('img')**,function(req,res){ 
    console.log(req.file); 


}); 

此时.files给未定义的在客户端代码

public class filterpic extends AppCompatActivity { 

File filePath; 
String photoPath; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.filter_page); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.appbar0); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    Bundle extras = getIntent().getExtras(); 
    **photoPath = extras.getString("photoPath"); 
    filePath = getFileStreamPath(photoPath);** 

    Bitmap bitmap = BitmapFactory.decodeFile(String.valueOf(filePath)); 
    ImageView imgView = (ImageView) findViewById(R.id.imagebyte); 
    imgView.setImageBitmap(bitmap); 
} 

public void upload(View view){ 
    new HttpUpload(this,String.valueOf(filePath)).execute(); 


} 

}

public class HttpUpload extends AsyncTask<Void, Integer, Integer> { 

private Context context; 
private String imgPath; 
int serverResponseCode = 0; 


public HttpUpload(Context context, String imgPath) { 
super(); 
this.context = context; 
this.imgPath = imgPath; 
} 


@Override 
protected Integer doInBackground(Void... params) { 

String upLoadServerUri = "http://192.168.10.182:8080/uploadimage"; 


HttpURLConnection conn = null; 
DataOutputStream dos = null; 
String lineEnd = "\r\n"; 
String twoHyphens = "--"; 
String boundary = "*****"; 
int bytesRead, bytesAvailable, bufferSize; 
byte[] buffer; 
int maxBufferSize = 1 * 1024 * 1024; 
File sourceFile = new File(imgPath); 
if (!sourceFile.isFile()) { 
    Log.e("uploadFile", "Source File Does not exist"); 
    return 0; 
} 
try { // open a URL connection to the Servlet 
    FileInputStream fileInputStream = new FileInputStream(sourceFile); 
    Log.i("uploadFile", "" + fileInputStream); 
    URL url = new URL(upLoadServerUri); 
    conn = (HttpURLConnection) url.openConnection(); // Open a HTTP connection to the URL 
    conn.setDoInput(true); // Allow Inputs 
    conn.setDoOutput(true); // Allow Outputs 
    conn.setUseCaches(false); // Don't use a Cached Copy 
    conn.setRequestMethod("POST"); 
    conn.setRequestProperty("Connection", "Keep-Alive"); 
    conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
    conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
    conn.setRequestProperty("uploaded_file",imgPath); 
    dos = new DataOutputStream(conn.getOutputStream()); 

    dos.writeBytes(twoHyphens + boundary + lineEnd); 
    dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""+ imgPath + "\"" + lineEnd); 
    dos.writeBytes(lineEnd); 

    bytesAvailable = fileInputStream.available(); // create a buffer of maximum size 

    bufferSize = Math.min(bytesAvailable, maxBufferSize); 
    buffer = new byte[bufferSize]; 

    // read file and write it into form... 
    bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

    while (bytesRead > 0) { 
     dos.write(buffer, 0, bufferSize); 
     bytesAvailable = fileInputStream.available(); 
     bufferSize = Math.min(bytesAvailable, maxBufferSize); 
     bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
    } 

    // send multipart form data necesssary after file data... 
    dos.writeBytes(lineEnd); 
    dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

    // Responses from the server (code and message) 
    serverResponseCode = conn.getResponseCode(); 
    String serverResponseMessage = conn.getResponseMessage(); 

    Log.i("uploadFile", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode); 

    //close the streams // 
    fileInputStream.close(); 
    dos.flush(); 
    dos.close(); 

} catch (MalformedURLException ex) { 

    ex.printStackTrace(); 

    Log.e("Upload file to server", "error: " + ex.getMessage(), ex); 
} catch (Exception e) { 

    e.printStackTrace(); 

    Log.e("Upload file to server Exception", "Exception : " + e.getMessage(), e); 
} 
return null; 
} 
} 

回答

0

您的节点服务器正在寻找名称为img的文件字段,但您的Java代码使用的是uploaded_file。改变一个或另一个,它应该工作(只要Java客户端正确地格式化请求)。

+0

upload.single()给出了一个未解决的错误webstorm不认为它是一种方法,即使安装了multer模块 –

+0

和你是什么意思(提供的Java客户端正在格式化请求) –

+0

RE:“未解决的错误” ,确保你安装了最新版本的'multer'以防万一。我不使用Webstorm,所以我不确定应该如何使用节点模块。 RE:Java客户端请求格式化,我指的是手工制作多部分请求的Java代码(手工缝合各个部分和边界,设置各种标题等)。 – mscdex

相关问题