2017-09-21 14 views
0

こんにちは私は、このクロスorgin requests.Whファイルをクリックすると、それを認識していない使用して、データベースから取得されたファイルを開くときにサーバー側でクロスオリジンの要求に直面しているエラーが発生しましたサーバー側のクロスオリジン要求

jquery.min.js:4 XMLHttpRequestがファイルをロードできません:/// C:/Users/JR00432239/Desktop/trial/src/temp/filetest1.docx。 Cross originリクエストは、http、data、chrome、chrome-extension、httpsのプロトコルスキームでのみサポートされています。

誰でもこの問題を解決するのに手伝ってください。ここで

は私のJavaコードは次のとおりです。ここで

package fileretrieve; 

import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.PrintWriter; 
import java.nio.charset.Charset; 
import java.sql.Blob; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.ResultSetMetaData; 
import java.sql.SQLException; 
import java.sql.Statement; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.MultipartConfig; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.Part; 

import org.apache.tomcat.util.http.fileupload.IOUtils; 

import dbConnection.Dbconn; 

@MultipartConfig 
public class FileRetrieve extends HttpServlet { 



    protected void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
      response.setContentType("text/plain"); 

      PrintWriter out = response.getWriter();   
      String onelevel=request.getParameter("onelevel"); 







      Connection conn = null; // connection to the database 
      String message = null; 
      Statement st = null;// message will be sent back to client 



      try { 
       // connects to the database 
       conn = Dbconn.getConnection(); 
       st = conn.createStatement(); 

       PreparedStatement ps=conn.prepareStatement("select data from files1 where board=?"); 
       ps.setString(1,onelevel);     
       //out.print("<table width=25% border=1>"); 
       // out.print("<center><h1>Result:</h1></center>"); 
       ResultSet rs=ps.executeQuery();     
       /* Printing column names */ 
       ResultSetMetaData rsmd=rs.getMetaData(); 
       int count=0; 
       while(rs.next()) 
        { 
        count=count+1; 
        FileOutputStream fos = new FileOutputStream("C:\\Users\\JR00432239\\Desktop\\trial\\src\\temp\\filetest"+count+".docx"); 
        fos.write(rs.getBytes(1)); 
        fos.close(); 

//     out.print("<tr>"); 
//     out.print("<td>"+rsmd.getColumnName(1)+"</td>"); 
//     out.print("<td><a href=\"file:///C:/Users/JR00432239/Desktop/trial/src/temp/test.pdf\" target=\"_self\">"+count+"</a></td></tr>"); 
//     getServletContext().getRequestDispatcher("/home.html").forward(request, response); 
        System.out.println("writing..."); 
        response.getWriter().write("{\"name\":\""+count+"\",\"path\":\"C:/Users/JR00432239/Desktop/trial/src/temp/filetest"+count+".docx\"}"); 



       } 


//     out.print("</table>"); 
//     


      }catch (Exception e2) 
      { 
       e2.printStackTrace(); 
      } 

      finally{ 

//   request.setAttribute("data", data); 
//   RequestDispatcher rd =request.getRequestDispatcher("userview.jsp"); 
//    

       out.close(); 
      } 


      // forwards to the message page 
     // getServletContext().getRequestDispatcher("/home.html").forward(request, response); 
    } 

} 

は私のhtmlコードは次のとおりです。 ここ

を提出することは、私のjavascriptのページです:

$("#retrieve").click(function(){ 

    $.ajax({ 
      url : 'FileRetrieve', 
      method:"POST", 
      data : { 
       onelevel : $('#onelevel').val() 
      }, 

      crossDomain: true, 
      success : function(responseText) { 
       var data=JSON.parse(responseText) 
       $("#files_data").html('') 
       $("#files_data").html('<table><tr><td><button onclick="getFile()">'+data.name+'</button></td></tr></table>') 

      }, 
      error: function(XMLHttpRequest, textStatus, errorThrown) { 
       alert("Status: " + textStatus); alert("Error: " + errorThrown); 
      } 
     }); 
    return false; 
}); 
+0

'クロスオリジン要求は、プロトコルスキーム(http、data、chrome、chrome-extension、https')でのみサポートされています。注: 'url: 'FileRetrieve'は、chrome on file:///プロトコルのスキームを除いて、これまでにクロスオリジンではありませんが、サーバーサイドのコードがあるのでfile:///を使用することはできません...混乱している? –

+0

実際には、すべてのretievedファイルをローカルフォルダに保存しています。だから私はファイルを使用しています:/// –

+0

よく、あなたはできません、確かにクロムではない –

答えて

0

あなたのように、クロムを使用している場合Allow-Control-Allow-Origin:* のようなクロムエクステンションを試してみてください3210

フラグ

path/to/chrome.exe --allow-file-access-from-files 

か、単にFirefoxのに切り替えて、問題はこれが唯一のクイック修正するだろうが、まだ

であるかどうかを確認して、コマンドラインを使用して固定されていない場合は、 実行クローム開発中の

EDIT

私の知る限りでは、BESあなたができることは、httpサーバでファイルを利用できるようにし、httpプロトコルを使用してそれらにアクセスすることです。

+0

私はこの問題に直面している私もクロムでチェックした –

+0

私は上記のパスでクロムをチェックしたが、 –

+0

でもHTTPサーバーでファイルを利用できるようにし、ファイルにアクセスするときはhttpパスを使用してみてください。 – prabushitha

関連する問題